A. 序列
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

定义函数 $$$f(x)$$$,表示序列 $$$x$$$ 中不同元素的种类数。例如:

  • $$$f([1,2,3,3]) = 3$$$,因为该序列包含三种不同的元素:$$$1, 2, 3$$$。
  • $$$f([2,2,2,2]) = 1$$$,因为所有元素相同,仅有一种不同的元素。

进一步地,我们定义函数 $$$g(y)$$$,表示序列 $$$y$$$ 所有非空子序列 $$$x$$$ 对应的 $$$f(x)$$$ 之和,即: $$$$$$ g(y) = \sum_{x \subseteq y, x \neq \emptyset} f(x) $$$$$$ 换句话说,$$$g(y)$$$ 计算了 $$$y$$$ 的所有非空子序列不同元素种类数的总和。

一个序列的子序列,指的是从原序列中删除零个或多个元素后,其余元素保持原有相对顺序不变得到的序列。

现在,给定一个正整数 $$$x$$$,你的任务是构造一个序列 $$$a$$$,使得 $$$g(a) = x$$$,或报告这样的序列不存在。

Input

输入包含一个正整数 $$$x$$$($$$1 \le x \le 10^{18}$$$)。

Output

如果不存在满足条件的序列,输出一行 No

否则,第一行输出 Yes,第二行输出一个整数 $$$n$$$ 表示序列长度,第三行输出 $$$n$$$ 个正整数 $$$a_1, a_2, \ldots, a_n$$$ 表示这个序列。

要求 $$$1 \le n \le 10^5$$$,$$$1 \le a_i \le n$$$。可以证明如果有解,必然存在满足限制的解。

Examples
Input
1
Output
Yes
1
1
Input
4
Output
Yes
2
2 1
Input
10
Output
Yes
3
3 1 3