atcoder#AGC031C. [AGC031C] Differ by 1 Bit

[AGC031C] Differ by 1 Bit

配点 : 800800

問題文

整数 N, A, BN,\ A,\ B が与えられます。 (0, 1, ... 2N1)(0,\ 1,\ ...\ 2^N-1) の順列 (P0, P1, ... P2N1)(P_0,\ P_1,\ ...\ P_{2^N-1}) であって、 次の条件をすべて満たすものが存在するかどうか判定してください。 また、存在するなら 11 つ構成してください。

  • P0=AP_0=A
  • P2N1=BP_{2^N-1}=B
  • すべての 0i<2N10 \leq i < 2^N-1 について、PiP_iPi+1P_{i+1}22 進数表記でちょうど 11 桁だけ異なる。

制約

  • 1N171 \leq N \leq 17
  • 0A2N10 \leq A \leq 2^N-1
  • 0B2N10 \leq B \leq 2^N-1
  • ABA \neq B
  • 入力される値はすべて整数である。

入力

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

NN AA BB

出力

条件を満たす順列が存在しないならば NO と出力せよ。

存在するならば、まず 11 行目に YES と出力せよ。 そして 22 行目に (P0, P1, ... P2N1)(P_0,\ P_1,\ ...\ P_{2^N-1}) を空白区切りで出力せよ。 なお、解が複数個存在する場合はどれを出力してもよい。

2 1 3
YES
1 0 2 3

P=(1,0,2,3)P=(1,0,2,3)22 進数表記すると (01,00,10,11)(01,00,10,11) となり、どの隣り合う 22 要素もちょうど 11 桁だけ異なります。

3 2 1
NO