#agc031d. [agc031_d]A Sequence of Permutations

[agc031_d]A Sequence of Permutations

问题描述

对于整数NNAABB,判断是否存在一个排列(P0,P1,...,P2N1)(P_0, P_1, ..., P_{2^N-1}),满足以下条件,并创建一个满足条件的排列。

  • P0=AP_0=A
  • P2N1=BP_{2^N-1}=B
  • 对于所有0i<2N10 \leq i < 2^N-1PiP_iPi+1P_{i+1}的二进制表示中仅有一个位不同。

约束条件

  • 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

如果存在满足条件的排列,第一行打印 YES。然后,第二行打印 (P0,P1,...,P2N1)(P_0, P_1, ..., P_{2^N-1}),之间用空格隔开。如果有多个解,任何一个都可以接受。

示例输入 1

2 1 3

示例输出 1

YES
1 0 2 3

排列P=(1,0,2,3)P=(1, 0, 2, 3)的二进制表示为(01,00,10,11)(01, 00, 10, 11),其中任意相邻的元素恰好有一个不同的位。

示例输入 2

3 2 1

示例输出 2

NO