爱买手办的张三
题号:NC206648
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld

题目描述

张三非常喜欢买手办,他的每个手办都有一个和其他手办不同的愉悦值y_i,张三通过购买这些手办最后获得愉悦值Y的值是这些手办所有的愉悦值的或,即 Y = (y_1 | y_2...... | y_n), 现在张三知道了自己最后获得的愉悦值 Y,但是他不知道自己购买了多少手办,所以他想知道他最多/最少可能购买了多少手办,以及购买的每个手办的愉悦值是多少。
注:由于张三的钞能力有限,保证他最多可能购买的手办数量不会超过

输入描述:

一行,一个非负整数 

输出描述:

第一行: 输出一个整数  代表张三最少购买了多少手办。 接下来 行,每行一个整数,代表当前手办的愉悦值
之后一行:输出一个整数 代表张三最多购买了多少手办。 接下来 行,每行一个整数,代表当前手办的愉悦值
注:你必须输出一个递增且没有重复元素的序列,即对于
示例1

输入

复制
0

输出

复制
1
0
1
0
示例2

输入

复制
3

输出

复制
1
3
4
0
1
2
3