atcoder#AGC031C. [AGC031C] Differ by 1 Bit

[AGC031C] Differ by 1 Bit

题目描述

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

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

输入格式

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

N N A A B B

输出格式

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

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

题目大意

00 ~ 2n12^n-1 排成一个排列 PP 满足:

1.P1=AP_1=A

2.P2n=BP_{2^n}=B

3.PiP_iPi+1P_{i+1} 在二进制表示下只相差 11 位。

若无满足条件的 PP,输出 NONO

否则第一行输出 YESYES,第二行输出任意一个满足条件的序列

2 1 3
YES
1 0 2 3
3 2 1
NO

提示

制約

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

Sample Explanation 1

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