同位序列
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

定义 f(x)x 在二进制表示下的 1 的个数。
例如 f(7)=3f(8)=1f(9)=2
定义 g(x) 为 第一个比 x 大的数字 y ,使得 f(x)=f(y)
例如 g(1)=2g(2)=4g(3)=5
给你一个长度为 n 的数组 a ,第 i 个元素为 a_i
我们希望从数组 a 中挑选出一些元素,构造一个长度为 m 的同位序列 b
同位序列 满足如下条件:
对于所有的 j \in [2,m] ,都有 b_j=g(b_{j-1})
当然,同位序列越长越好,请你最大化其长度 m ,然后输出 m 和对应的同位序列。
如果有多解,输出任意一个即可。

输入描述:

第一行有一个整数 n\ (\ 1 \leq n \leq 10^5\ )
第二行有 n 个整数 a_i\ (\ 1 \leq a_i \leq 10^9\ )

输出描述:

第一行输出一个整数 m ,代表 最长的同位序列 的长度。
第二行输出 m 个整数,代表同位序列中的元素。
示例1

输入

复制
5
1 4 2 5 3

输出

复制
3
1 2 4

备注:

思考题:
如果要求 ba 的子序列,那么应该怎么写呢?
这个问题并不难,就不弄 G 题了。