#P15763. 二进制连成一片

二进制连成一片

题目描述

Denis 最近迷上了数字的二进制写法。他把若干个正整数的二进制表示一行一行写在纸上,并且让所有数字的最低位,也就是最右边的一位,对齐。

有一次,他把 1177 的二进制表示按某种顺序排好后,发现所有写着 11 的格子竟然刚好连成了一整片区域。这里把每一个二进制位看成网格上的一个小方格,两个写着 11 的方格如果有公共边,就认为它们相邻;所有写着 11 的方格需要属于同一个连通块。

现在 Denis 想知道,对于给定的 nn,能不能把 1,2,,n1,2,\ldots,n 按某种顺序排列,使得这些数的二进制表示按上述方式写下后,所有 11 方格连成一个单独的连通区域。

请你找出一个这样的排列,或者判断不存在。

输入格式

输入仅一行,包含一个整数 nn

输出格式

如果不存在满足要求的排列,输出一行 NO

否则,第一行输出 YES,第二行输出 11nn 的一个满足要求的排列。

如果有多种合法答案,输出任意一种即可。

数据范围

  • 1n21051\le n\le 2\cdot 10^5

样例 1

输入

1

输出

YES
1

样例 2

输入

2

输出

NO

样例 3

输入

3

输出

YES
2 3 1

解释

【插图提示】这里建议加入原题第三个样例的示意图:三行分别为 223311 的二进制表示,右端对齐;用阴影标出写着 11 的方格,展示这些方格通过公共边连成一个连通块。