#arc138d. [arc138_d]Differ by K bits

[arc138_d]Differ by K bits

题目描述

给定整数 NNKK。确定是否存在一种排列 P=(P0,P1,cdots,P2N1)P=(P_0,P_1,\\cdots,P_{2^N-1}),满足下面的条件,并且如果存在,则构造出一种这样的序列。注意 PP00 开始的。

  • 对于每个 ii (0leqileq2N10 \\leq i \\leq 2^N-1),PiP_iPi+1mod2NP_{i+1 \\mod 2^N} 在二进制表示中恰好有 KK 位不同。在比较之前,将两个整数都用 NN 位进行零填充。

约束条件

  • 1leqKleqNleq181 \\leq K \\leq N \\leq 18
  • 输入中的所有值都是整数。

输入

输入以标准输入给出,格式如下:

NN KK

输出

如果不存在满足条件的 PP,则输出 No。如果存在这样的 PP,则以以下格式输出:

Yes P0P_0 P1P_1 cdots\\cdots P2N1P_{2^N-1}

如果有多种满足条件的解答,任意输出一种即可。


示例输入 1

3 1

示例输出 1

Yes
0 1 3 2 6 7 5 4

这里,PP 的二进制表示为:P=(000,001,011,010,110,111,101,100)P=(000,001,011,010,110,111,101,100)

例如,我们可以看到 P1=001P_1=001P2=011P_2=011 在二进制表示中恰好有 11 位不同,满足 i=1i=1 的条件。对于每个 ii 都是如此。


示例输入 2

2 2

示例输出 2

No