AT_agc057_c [AGC057C] Increment or Xor

Description

[problemUrl]: https://atcoder.jp/contests/agc057/tasks/agc057_c 正整数 $ N $ および、$ 2^N $ 項からなる数列 $ A\ =\ (A_0,\ A_1,\ \ldots,\ A_{2^N-1}) $ が与えられます。ここで各 $ A_i $ は $ 0 $ 以上 $ 2^N-1 $ 以下の整数であり、$ i\neq\ j $ ならば $ A_i\neq\ A_j $ が成り立ちます。 あなたは数列 $ A $ に対して、次の $ 2 $ 種類の操作を行うことができます: - 操作 $ + $:すべての $ i $ に対して、$ A_i $ を $ (A_i\ +\ 1)\ \bmod\ 2^N $ に変更する。 - 操作 $ \oplus $:$ 0 $ 以上 $ 2^N-1 $ 以下の整数 $ x $ を選ぶ。すべての $ i $ に対して $ A_i $ を $ A_i\oplus\ x $ に変更する。 ただしここで、$ \oplus $ はビット単位 $ \mathrm{XOR} $ 演算を表します。 ビット単位 $ \mathrm{XOR} $ 演算とは 非負整数 $ A,\ B $ のビット単位 $ \mathrm{XOR} $ 、$ A\ \oplus\ B $ は、以下のように定義されます。 - $ A\ \oplus\ B $ を二進表記した際の $ 2^k $ ($ k\ \geq\ 0 $) の位の数は、$ A,\ B $ を二進表記した際の $ 2^k $ の位の数のうち一方のみが $ 1 $ であれば $ 1 $、そうでなければ $ 0 $ である。 例えば、$ 3\ \oplus\ 5\ =\ 6 $ となります (二進表記すると: $ 011\ \oplus\ 101\ =\ 110 $)。 あなたの目的は、すべての $ i $ に対して $ A_i\ =\ i $ が成り立つようにすることです。目的を達成することが可能であるかを判定してください。本問題の制約下では、目的を達成することが可能な場合には、操作回数を $ 10^6 $ 回以下にできることが証明できます。そのような操作列を出力してください。

Input Format

N/A

Output Format

N/A

Explanation/Hint

### 制約 - $ 1\leq\ N\leq\ 18 $ - $ 0\leq\ A_i\ \leq\ 2^N\ -\ 1 $ - $ i\neq\ j $ ならば $ A_i\neq\ A_j $ ### Sample Explanation 1 出力の操作列によって、数列 $ A $ は次のように変化します。 - 初期状態:$ A\ =\ (5,0,3,6,1,4,7,2) $ - 操作 $ + $:$ A\ =\ (6,1,4,7,2,5,0,3) $ - 操作 $ \oplus $ ($ x\ =\ 6 $):$ A\ =\ (0,7,2,1,4,3,6,5) $ - 操作 $ + $:$ A\ =\ (1,0,3,2,5,4,7,6) $ - 操作 $ \oplus $ ($ x\ =\ 1 $):$ A\ =\ (0,1,2,3,4,5,6,7) $ ### Sample Explanation 2 どのように操作を行っても、目的を達成することはできません。 ### Sample Explanation 3 $ 0 $ 回の操作により目的が達成できます。なお、空行の出力の有無は、ジャッジ結果に影響しません。