#P15763. 二进制连成一片
二进制连成一片
题目描述
Denis 最近迷上了数字的二进制写法。他把若干个正整数的二进制表示一行一行写在纸上,并且让所有数字的最低位,也就是最右边的一位,对齐。
有一次,他把 到 的二进制表示按某种顺序排好后,发现所有写着 的格子竟然刚好连成了一整片区域。这里把每一个二进制位看成网格上的一个小方格,两个写着 的方格如果有公共边,就认为它们相邻;所有写着 的方格需要属于同一个连通块。
现在 Denis 想知道,对于给定的 ,能不能把 按某种顺序排列,使得这些数的二进制表示按上述方式写下后,所有 方格连成一个单独的连通区域。
请你找出一个这样的排列,或者判断不存在。
输入格式
输入仅一行,包含一个整数 。
输出格式
如果不存在满足要求的排列,输出一行 NO。
否则,第一行输出 YES,第二行输出 到 的一个满足要求的排列。
如果有多种合法答案,输出任意一种即可。
数据范围
- 。
样例 1
输入
1
输出
YES
1
样例 2
输入
2
输出
NO
样例 3
输入
3
输出
YES
2 3 1
解释
【插图提示】这里建议加入原题第三个样例的示意图:三行分别为 、、 的二进制表示,右端对齐;用阴影标出写着 的方格,展示这些方格通过公共边连成一个连通块。