配点 : 600 点
問題文
以下の条件を満たす、長さ 2M+1 の数列 a = {a1, a2, ..., a2M+1} を、存在するならば 1 つ構築してください。
- a は 0 以上 2M 未満の整数を、それぞれちょうど 2 つずつ含む。
- ai=aj を満たす任意の i, j (i<j) について、ai xor ai+1 xor ... xor aj=K である。
xor (排他的論理和) とは
整数 c1,c2,...,cn の xor は以下のように定義されます。
- c1 xor c2 xor ... xor cn を二進表記した際の 2k (k≥0) の位の数は、c1,c2,...,cn のうち二進表記した際の 2k の位の数が 1 となるものが奇数個ならば 1、偶数個ならば 0 である。
例えば、3 xor 5=6 です (二進表記すると: 011
xor 101
= 110
です)。
制約
- 入力は全て整数である。
- 0≤M≤17
- 0≤K≤109
入力
入力は以下の形式で標準入力から与えられる。
M K
出力
条件を満たす数列 a が存在しなければ -1
を出力せよ。
存在するならば、a の要素を空白区切りで出力せよ。
条件を満たす数列が複数存在する場合、どれを出力してもよい。
1 0
0 0 1 1
このケースでは、条件を満たす数列は複数存在します。
例えば a = {0,0,1,1} の場合、ai=aj を満たす (i, j) (i<j) として (1,2) と (3,4) があります。a1 xor a2=0, a3 xor a4=0 であるため、この a は与えられた条件を満たしています。
1 1
-1
条件を満たす数列は存在しません。
5 58
-1
条件を満たす数列は存在しません。