#abc126f. [abc126_f]XOR Matching

[abc126_f]XOR Matching

問題文

以下の条件を満たす、長さ 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) について、$a_i \\ xor \\ a_{i + 1} \\ xor \\ ... \\ xor \\ a_j = K$ である。

xor (排他的論理和) とは

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

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

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

制約

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

入力

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

MM KK

出力

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

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

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


入力例 1

1 0

出力例 1

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) があります。a1xora2=0,a3xora4=0a_1 \\ xor \\ a_2 = 0,\\ a_3 \\ xor \\ a_4 = 0 であるため、この aa は与えられた条件を満たしています。


入力例 2

1 1

出力例 2

-1

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


入力例 3

5 58

出力例 3

-1

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