#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}}},满足以下条件(如果存在这样的序列)。

  • 序列 aa 中的每个整数都是从 002M12^M - 1(包括端点)的数字,并且每个数字在序列中出现两次。
  • 对于任意的 iijj (i<j)(i < j),如果 ai=aja_i = a_j,则等式 $a_i \\ xor \\ a_{i + 1} \\ xor \\ ... \\ xor \\ a_j = K$ 成立。

什么是异或运算(xor)?

对于整数 c1,c2,...,cnc_1, c_2, ..., c_n,异或运算定义如下:

  • 当将 c1xorc2xor...xorcnc_1 \\ xor \\ c_2 \\ xor \\ ... \\ xor \\ c_n 转换为二进制时,如果在第 2k2^k 位(kgeq0k \\geq 0)上有奇数个整数 cic_i,使得其二进制表示在第 2k2^k 位上为 1,那么转换后的二进制数的第 2k2^k 位为 1;否则,该位为 0。

例如,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,则以空格分隔地打印出其中一个序列 aa 的元素。

如果有多个满足条件的序列,则可以接受任意一个。

示例输入 1

1 0

示例输出 1

0 0 1 1

对于这个例子,存在多个满足条件的序列。

例如,当 aa = {0,0,1,10, 0, 1, 1} 时,有两对 (i,j)(i<j)(i,\\ j)\\ (i < j) 满足 ai=aja_i = a_j(1,2)(1, 2)(3,4)(3, 4)。由于 a1xora2=0a_1 \\ xor \\ a_2 = 0a3xora4=0a_3 \\ xor \\ a_4 = 0,序列 aa 满足条件。

示例输入 2

1 1

示例输出 2

-1

没有满足条件的序列。

示例输入 3

5 58

示例输出 3

-1

没有满足条件的序列。