#R1016. [KBC001Ex] Points 1

[KBC001Ex] Points 1

题目描述

给你包含 nn 个数字的一个数列 x1xnx_1\sim x_n,问最多可以选出多少个数字,使得它们之间两两的差2k2^kkk 为非负整数)。

换句话说,你需要选择尽可能多的点 xi1,xi2,,xim x_{i_1}, x_{i_2}, \dots, x_{i_m} ,使得对于每一对点 xij x_{i_j} xik x_{i_k} ,都满足 xijxik=2d |x_{i_j} - x_{i_k}| = 2^d ,其中 d d 是非负整数(不一定对于每一对点都相同)。

输入格式

第一行包含一个整数 n n 1n2105 1 \le n \le 2 \cdot 10^5 )——点的数量。

第二行包含 n n 个两两不同的整数 x1,x2,,xn x_1, x_2, \dots, x_n 109xi109 -10^9 \le x_i \le 10^9 )——点的坐标。

输出格式

第一行输出 m m ——所选子集满足上述条件的最大可能点数。

第二行输出 m m 个整数 ——你选择的子集中点的坐标。

如果存在多个答案,输出其中任意一个。

样例 #1

样例输入 #1

6
3 5 4 7 10 12

样例输出 #1

3
7 3 5

样例 #2

样例输入 #2

5
-1 2 5 8 11

样例输出 #2

1
8

提示

在第一个样例中,答案是 [7,3,5] [7, 3, 5] 。请注意,73=4=22 |7-3|=4=2^2 75=2=21 |7-5|=2=2^1 以及 35=2=21 |3-5|=2=2^1 。你无法找到更多满足要求的点构成的子集。