100 atcoder#ABC126F. [ABC126F] XOR Matching

[ABC126F] XOR Matching

配点 : 600600

問題文

以下の条件を満たす、長さ 2M+12^{M + 1} の数列 aa = {a1, a2, ..., a2M+1a_1,\ a_2,\ ...,\ a_{2^{M + 1}}} を、存在するならば 11 つ構築してください。

  • aa00 以上 2M2^M 未満の整数を、それぞれちょうど 22 つずつ含む。
  • ai=aja_i = a_j を満たす任意の i, j (i<j)i,\ j \ (i < j) について、ai xor ai+1 xor ... xor aj=Ka_i \ xor \ a_{i + 1} \ xor \ ... \ xor \ a_j = K である。
xor (排他的論理和) とは

整数 c1,c2,...,cnc_1, c_2, ..., c_n の xor は以下のように定義されます。

  • c1 xor c2 xor ... xor cnc_1 \ xor \ c_2 \ xor \ ... \ xor \ c_n を二進表記した際の 2k2^k (k0k \geq 0) の位の数は、c1,c2,...,cnc_1, c_2, ..., c_n のうち二進表記した際の 2k2^k の位の数が 11 となるものが奇数個ならば 11、偶数個ならば 00 である。

例えば、3 xor 5=63 \ xor \ 5 = 6 です (二進表記すると: 011 xorxor 101 == 110 です)。

制約

  • 入力は全て整数である。
  • 0M170 \leq M \leq 17
  • 0K1090 \leq K \leq 10^9

入力

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

MM KK

出力

条件を満たす数列 aa が存在しなければ -1 を出力せよ。

存在するならば、aa の要素を空白区切りで出力せよ。

条件を満たす数列が複数存在する場合、どれを出力してもよい。

1 0
0 0 1 1

このケースでは、条件を満たす数列は複数存在します。

例えば aa = {0,0,1,10, 0, 1, 1} の場合、ai=aja_i = a_j を満たす (i, j) (i<j)(i,\ j)\ (i < j) として (1,2)(1, 2)(3,4)(3, 4) があります。a1 xor a2=0, a3 xor a4=0a_1 \ xor \ a_2 = 0,\ a_3 \ xor \ a_4 = 0 であるため、この aa は与えられた条件を満たしています。

1 1
-1

条件を満たす数列は存在しません。

5 58
-1

条件を満たす数列は存在しません。