G - Super 累積 XOR 解説 /

実行時間制限: 4 sec / メモリ制限: 1024 MiB

配点 : 100

問題文

N 個の整数からなる数列 A = (A_1, A_2, \dots, A_N) が与えられます。

以下の操作を K 回行った後の A を出力してください。

  • i=1,2, \dots ,N に対して一斉に A_iA_1 \oplus A_2 \oplus \dots \oplus A_i に置き換える。

ただし、 \oplus はビットごとの排他的論理和を表します。

制約

  • 1 \le N \le 2 \times 10^5
  • 1 \le K \le 10^{18}
  • 0 \le A_i < 2^{30}
  • 入力はすべて整数

部分点

追加の制約 N \le 1000 を満たすデータセットに正解した場合は 1 点が与えられる。


入力

入力は以下の形式で標準入力から与えられます。

N K
A_1 A_2 \dots A_N

出力

上述の操作を K 回行った後の A=(A_1,A_2,\dots,A_N) の各要素を、順に空白区切りで出力してください。


入力例 1

3 2
1 2 3

出力例 1

1 2 2

はじめ、 (A_1, A_2, A_3)=(1,2,3) です。

1 回目の操作を行うと (A_1, A_2, A_3)=(1,1 \oplus 2,1 \oplus 2 \oplus 3)=(1,3,0) となります。

2 回目の操作を行うと (A_1, A_2, A_3)=(1,1 \oplus 3,1 \oplus 3 \oplus 0)=(1,2,2) となります。


入力例 2

10 3141592653589793
528994566 21013803 220742658 357578426 605624719 350507118 731879815 393165536 215218511 161335641

出力例 2

528994566 516387885 334442543 113182357 581312282 910315380 501077747 179498003 107025756 268229637