class Solution {
    fun getMaximumXor(
        nums: IntArray,
        maximumBit: Int,
    ): IntArray {
        val mask = 1.shl(maximumBit) - 1

        var runningXor = nums.reduce { x, y -> x.xor(y) }
        return IntArray(nums.size) { i ->
            val current = runningXor.xor(mask)
            runningXor = runningXor.xor(nums[nums.size - 1 - i])
            current
        }
    }
}