AND VS MEX
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小苯有一个初始为空的可重数字集合 \Bbb S 和一个长度为 n 的序列 a_1,a_2,\dots,a_n。现在他可以进行任意次以下操作,给 \Bbb S 中加入一些元素,具体的:
\hspace{23pt}\bullet\,他可以任选 a 中的任意个(也可以不选,此时 \operatorname{and} 视为 0)数字,将这些数字的 \operatorname{and}(按位与)加入集合 \Bbb S
\hspace{15pt}他可以做任意次上述操作,请问 \Bbb S\operatorname{mex} 最大可以达到多少。

【名词解释】
\hspace{15pt}\operatorname{and}:即按位与(Bitwise AND),指对两个整数的二进制表示按位进行与运算。如果您需要更多位运算相关的知识,可以参考 OI-Wiki的相关章节
\hspace{15pt}\operatorname{mex}:整数数组的 \operatorname{mex} 定义为没有出现在数组中的最小非负整数。例如,\operatorname{mex}(1,2,3) =0\operatorname{mex}(0,2,5) =1

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 10^5\right) 代表数据组数,每组测试数据描述如下:
\hspace{15pt}输入一行一个整数 n\left(1 \leqq n \leqq 10^6\right),表示序列的长度。
\hspace{15pt}第二行 n 个整数 a_1,a_2,\dots,a_n\left(0 \leqq a_i \leqq n\right),表示序列中的元素。
\hspace{15pt}除此之外,保证同一个测试文件中 n 的总和不超过 10^6

输出描述:

\hspace{15pt}对于每一组测试数据,新起一行输出一个整数,表示集合 \Bbb S 的最大 \operatorname{mex}
示例1

输入

复制
2
6
1 6 4 3 1 3
3
3 3 3

输出

复制
5
1

说明

\hspace{15pt}对于第一组测试数据,操作如下:
\hspace{23pt}\bullet\,一个数字都不选,可以得到 0\Bbb S = \{0\}
\hspace{23pt}\bullet\,选择 1,可以得到 1\Bbb S = \{0,1\}
\hspace{23pt}\bullet\,再选择 6,3,可以得到 6 \operatorname{and} 3=2\Bbb S = \{0,1,2\}
\hspace{23pt}\bullet\,再选择 3,可以得到 3\Bbb S = \{0,1,2,3\}
\hspace{23pt}\bullet\,再选择 4,可以得到 4\Bbb S = \{0,1,2,3,4\}
\hspace{15pt}将以上数字加入集合 \Bbb S,最终集合的 \operatorname{mex}=5,可以证明这是最优的答案。