atcoder#AGC031C. [AGC031C] Differ by 1 Bit

[AGC031C] Differ by 1 Bit

Score : 800800 points

Problem Statement

You are given integers N, AN,\ A and BB. Determine if there exists a permutation (P0, P1, ... P2N1)(P_0,\ P_1,\ ...\ P_{2^N-1}) of (0, 1, ... 2N1)(0,\ 1,\ ...\ 2^N-1) that satisfies all of the following conditions, and create one such permutation if it exists.

  • P0=AP_0=A
  • P2N1=BP_{2^N-1}=B
  • For all 0i<2N10 \leq i < 2^N-1, the binary representations of PiP_i and Pi+1P_{i+1} differ by exactly one bit.

Constraints

  • 1N171 \leq N \leq 17
  • 0A2N10 \leq A \leq 2^N-1
  • 0B2N10 \leq B \leq 2^N-1
  • ABA \neq B
  • All values in input are integers.

Input

Input is given from Standard Input in the following format:

NN AA BB

Output

If there is no permutation that satisfies the conditions, print NO.

If there is such a permutation, print YES in the first line. Then, print (P0, P1, ... P2N1)(P_0,\ P_1,\ ...\ P_{2^N-1}) in the second line, with spaces in between. If there are multiple solutions, any of them is accepted.

2 1 3
YES
1 0 2 3

The binary representation of P=(1,0,2,3)P=(1,0,2,3) is (01,00,10,11)(01,00,10,11), where any two adjacent elements differ by exactly one bit.

3 2 1
NO