Zeeman的异或数组
题号:NC295175
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

\hspace{15pt}Zeeman 有一个长度为 n 的整数数组 \{a_1,a_2,\dots,a_n\},其中每一个元素满足 0 \leqq a_i \lt 2^{60}
\hspace{15pt}Zeeman 可以对这个数组进行任意次操作,每次操作可以从数组中选择至少一个数字,然后将它们的异或结果加入到数组中。
\hspace{15pt}Zeeman 想知道,在经过了任意次操作后,这个数组的 \operatorname{mex} 最大是多少。

【名词解释】
\hspace{15pt}
\hspace{15pt}整数数组的 \operatorname{mex} 定义为没有出现在数组中的最小非负整数。例如 \operatorname{mex} \{1,2,3 \} =0\operatorname{mex} \{0,2,5\} =1

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 10^4\right) 代表数据组数,每组测试数据描述如下:
\hspace{15pt}第一行输入一个正整数 n \left(1 \leqq n \leqq 5 \times 10^5\right)
\hspace{15pt}第二行输入 n 个非负整数 a_1, a_2, \dots, a_n \left(0 \leqq a_i \lt 2^{60}\right),表示数组元素。

\hspace{15pt}除此之外,保证单个测试文件的 n 之和不超过 5 \times 10^5

输出描述:

\hspace{15pt} 对于每一组测试用例,新起一行输出一个非负整数,表示在经过了任意次操作后数组的最大 \operatorname{mex}
示例1

输入

复制
2
1
1
3
0 2 3

输出

复制
2
4

说明

\hspace{15pt}对于第一组测试数据,操作如下:
\hspace{23pt}\bullet\,第一次操作选择 a_1 = 1,异或得到 1,加入数组得到 \{1,1\}
\hspace{23pt}\bullet\,第二次操作选择 a_1 = 1a_2 = 1,异或得到 0,加入数组得到 \{1,1,0\}
\hspace{15pt}此时数组中没有出现的最小非负整数是 2,因此答案是 2。我们可以证明,2 是最大可能的 \operatorname{mex}