#ZF1162. 寻找数字方面的高手

寻找数字方面的高手

Description

小任很擅长寻找数字。

现在他找了 nn 个不同的数,并且他们的异或和为 mm,即 a1a2...an=ma_1 \oplus a_2 \oplus ... \oplus a_n=m,其中 \oplus 表示异或运算符。

在他的百般请求下,你需要找出长度为 nn 且各不相同的数组 bb,使得 $\left( a_1 \& b_1 \right) \oplus \left( a_2 \& b_2 \right) \oplus \cdots \oplus \left( a_n \& b_n \right) = m'$ ,其中 &\& 表示位与运算,mm' 表示不超过m的最大偶数。

异或运算:两个运算数的位中,相同则结果为0,不同则结果为1。例如,数字 33(二进制表示为0000001100000011)和数字 55(二进制表示为 0000010100000101)进行异或运算,结果为 0000011000000110,即为十进制中的 66

位与运算:只有两个数的二进制同时为 11,结果才为 11,否则为 00。例如,数字 33(二进制表示为0000001100000011)和数字 55(二进制表示为 0000010100000101)进行位与运算,结果为 0000000100000001,即十进制中的 11

Format

Input

本题有多组测试数据。

第一行输入一个整数 t (1t10000)t\ (1\leq t\leq 10000),表示有 tt 组测试用例。

对于每个测试用例,

第一行包含两个个整数 n,m (1n100000,0m<231)n,m\ (1\leq n\leq 100000,0\leq m < 2^{31}),分别表示数组的大小和数组元素异或和。

第二行包含 nn 个不同的整数 a1,a2,,an (0ai<231)a_1, a_2, \cdots, a_n\ (0 \leq a_i < 2^{31})。表示原本的数组。

保证题目中 nn 的总和不超过 100000100000

保证 mm 一定等于数组中所有元素的异或和。

Output

输出 tt 行,每行输出 nn 个整数,表示满足条件的数组 bb,对于 1in1 \leq i \leq n,第 ii 个整数表示 bib_i

如果有多种解决方案,输出其中任意一种即可。

Samples

3
4 8
2 4 6 8
3 5
2 3 4
1 1
1
2 4 6 8 
3 2 4 
0 

Limitation

1s, 1024KiB for each test case.