配点 : 700 点
問題文
長さ N の整数列 A=(A1,A2,⋯,AN),及び整数 M が与えられます.
各 k=1,2,⋯,M について,以下の操作をちょうど k 回行ったあとの AN の値を求めてください.
- すべての i (1≤i≤N) について,Ai の値を A1⊕A2⊕⋯⊕Ai で置き換える.
この置き換えはすべての i に対して同時に行う.
ただしここで,⊕ はビット単位 XOR 演算を表します.
ビット単位 XOR 演算とは
非負整数 A,B のビット単位 XOR 、A⊕B は、以下のように定義されます。
- A⊕B を二進表記した際の 2k (k≥0) の位の数は、A,B を二進表記した際の 2k の位の数のうち一方のみが 1 であれば 1、そうでなければ 0 である。
例えば、3 \oplus 5 = 6 となります (二進表記すると: 011 \oplus 101 = 110)。
一般に k 個の整数 p_1, p_2, p_3, \dots, p_k のビット単位 \mathrm{XOR} は (\dots ((p_1 \oplus p_2) \oplus p_3) \oplus \dots \oplus p_k) と定義され、これは p_1, p_2, p_3, \dots p_k の順番によらないことが証明できます。
制約
- 1≤N≤106
- 1≤M≤106
- 0≤Ai<230
- 入力される値はすべて整数
入力
入力は以下の形式で標準入力から与えられる.
N M
A1 A2 ⋯ AN
出力
各 k に対する答えを空白区切りで出力せよ.
操作の度に A は以下のように変化します.
- 初期状態:A=(2,1,3)
- 1 回目の操作後:A=(2,3,0)
- 2 回目の操作後:A=(2,1,1)