异或积

题目背景

$\texttt{id: 4d7e}$ 小 H 在课堂上学习了异或运算。 对于两个非负整数 $x,y$,它们的**异或**是指,将它们作为二进制数,对二进制表示中的每一位进行如下运算得到的结果: - $x$ 和 $y$ 的这一位上不同时,结果的这一位为 $1$; - $x$ 和 $y$ 的这一位上相同时,结果的这一位为 $0$。 $x$ 和 $y$ 的异或被记为 $x \operatorname{xor} y$ 或 $x \oplus y$。 在 C++ 中,你可以用 `x ^ y` 得到 $x$ 与 $y$ 的异或值。 另外,若干个数的异或称之为**异或和**。

题目描述

小 H 还了解到,一个长度为 $n$ 的数列 $a$ 的**异或积**是一个等长的数列 $b$,其中 $b_i$ 等于数列 $a$ 中除了 $a_i$ 以外其他元素的异或和,即 $$b_i = \bigoplus \limits_{j = 1}^{n} [j\ne i] a_j$$ 例如,数列 $\{1, 2, 3, 4\}$ 的异或积为 $\{5, 6, 7, 0\}$。 **异或积变换**是指将一个数列用它的异或积替换的过程,由于异或积变换之后数列长度不变,所以异或积变换可以连续进行多次。 现在,小 H 有一个长度为 $n$ 的数列 $a$,他想请你帮他计算出 $a$ 经过 $k$ 次异或积变换之后得到的序列。

输入输出格式

输入格式


**本题单个测试点内有多组测试数据**。 第一行一个整数 $T$,表示测试数据组数。 对于每一组测试数据: 第一行两个整数 $n,k$。 第二行 $n$ 个整数 $a_1,a_2,\cdots,a_n$。

输出格式


对于每一组测试数据: 一行 $n$ 个整数,表示数列 $a$ 经过 $k$ 次异或积变换之后得到的数列。

输入输出样例

输入样例 #1

1
4 1
1 2 3 4

输出样例 #1

5 6 7 0

输入样例 #2

1
4 2
0 0 0 1

输出样例 #2

0 0 0 1

输入样例 #3

见附件中的 samples/xor3.in

输出样例 #3

见附件中的 samples/xor3.ans

说明

### 样例 1 解释 此样例即为题目描述中的例子。 ### 样例 2 解释 第 $1$ 次异或积变换:$\{0,0,0,1\}\to\{1,1,1,0\}$; 第 $2$ 次异或积变换:$\{1,1,1,0\}\to\{0,0,0,1\}$。 ### 数据规模与约定 对于 $100\%$ 的测试数据,$1 \le T \le 10$,$2 \le n \le 10^5$,$1 \le k \le 10^{18}$,$0 \le a_i < 2^{32}$。 | 测试点编号 | $n\leq$ | $k \leq$ |特殊性质| | :----------: | :----------: | :----------: | :-----------: | | $1 \sim 3$ | $100$ | $100$ | | | $4 \sim 5$ | $1000$ | $1000$ | | | $6 \sim 7$ | $3$ | $10^{18}$ | | | $8 \sim 10$ | $10^5$ | $3$ | | | $11 \sim 13$ | $10^5$ | $10^{18}$ | $a$ 中所有数的异或和为 $0$ | | $14 \sim 15$ | $10^5$ | $10^{18}$ | $n$ 为奇数 | | $16 \sim 17$ | $10^5$ | $10^{18}$ | $n$ 为偶数 | | $18 \sim 20$ | $10^5$ | $10^{18}$ | | ### 提示 在 C++ 中,对于数据范围 $0\le x<2^{32}$,你可以: - 使用 `unsigned int x` 来定义; - 使用 `cin >> x` 或 `scanf("%u", &x)` 来输入; - 使用 `cout << x` 或 `printf("%u", x)` 来输出。