TUNA2026 東京Stage Welcome コンテスト (オープン) 2026/09/23 14:00 ~ 2026/09/23 18:00 4:00:00

C Gaming Sequence

問題
制限時間: 2 sec メモリ制限: 1024 MB
Gaming Sequence
Statement

\(7\)色に光るものは「ゲーミング○○」と呼びます。

\(7\)色をそれぞれ相異なる整数 \( C_1,C_2,...,C_7 \)で表すことにします。

\(0,1,...,2^K-1\) をちょうど\(1\)回ずつ並べた順列\(P=(P_1,P_2,...,P_{2^K})\)について、\(P\) を先頭から 8 個ずつ

\( (P_1,...,P_8) | (P_9,...,P_{16}) | (P_{17},...,P_{24}) | ... \)

のように分けます。同じ\(8\)要素をまとめてブロックと呼びます。

このとき、以下の\(2\)条件をともに満たす順列 \(P\) を ゲーミング数列と呼びます。

  • 各ブロックについてどの要素 \(x\) を選んでも、同じブロックに含まれる他の \(7\) 要素との XOR が \(C_1,C_2,...,C_7\) の \(7\) 種類をちょうど \(1\) 回ずつ取る。
  • 隣り合うブロックの境界にある \(2\) 要素は、 二進表記でちょうど \(1\) bit だけ異なる。 すなわちすべての \(1 ≤ i \lt 2^{K-3}\) について \( \mathrm{popcount}(P_{8i} \oplus P_{8i+1})=1 \)が成り立つ。

整数 \(K\) と \(C_1,C_2,...,C_7\)が与えられるので、ゲーミング数列を\(1\)つ構築してください。与えられる数列において条件を満たす数列が\(1\)つ以上存在することが保証されます。

Input

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

\(K\)
\(C_1\ C_2\ C_3\ C_4\ C_5\ C_6\ C_7\)

入力は以下の制約をすべて満たします。

  • \(3 \le K \le 20\)
  • \(1 \le C_i \lt 2^K\)
  • \(C_1,C_2,...,C_7\) は相異なります。
  • ゲーミング数列が少なくとも 1 つ存在することが保証されます。
  • 入力される値はすべて整数である

Output

条件を満たすゲーミング数列 \(P\) を、以下の形式で出力してください。

\(P_1\ P_2\ ...\ P_{2^K}\)

条件を満たすゲーミング数列が複数存在する場合、そのうちどれを出力しても構いません。

Examples

Input 1
3
1 2 3 4 5 6 7
Output 1
0 1 2 3 4 5 6 7
Input 2
4
7 14 5 11 9 2 12
Output 2
1 6 8 13 15 3 10 4 5 11 2 14 7 0 12 9

Note

\(1\)つ目のサンプルでは例えば\(1\oplus2=3、1\oplus7=6\)のように出力例のどの要素を選んでもほかの\(7\)要素とのXORが\(1,2,3,4,5,6,7\) をちょうど\(1\)回ずつ取ります。また\(8\)個の要素しかないので条件2は自然と達成されます。

\(2\)つ目のサンプルでは最初の\(8\)個と次の\(8\)個はそれぞれ条件1を満たしています。また境界の4と5について\(4\oplus5=1\)なので\(1\)bitだけ異なるので条件\(2\)も満たしています。