小苯的序列合并
题号:NC300894
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}给定长度为 n 的序列 a,你可以对 a 做如下操作任意次:

\hspace{23pt}\bullet\ 选择一个下标 i\ (1 \leqq i < |a|),将 a_ia_{i+1} 合并起来,结果为 a_i\oplus a_{i+1}。(其中 \oplus 表示按位异或运算符,|a| 表示 a 当前的长度。)

\hspace{15pt}所有操作结束后,小苯希望你最大化最终 a 中所有数字的按位与,即 \rm AND(\&) 值,请你算一下这个最大值是多少吧。

输入描述:

\hspace{15pt}每个测试文件包含多组测试数据。第一行输入一个整数 T\ (1 \leqq T \leqq 10^5) 代表数据组数,每组测试数据描述如下:
\hspace{15pt}第一行一个正整数 n\ (1 \leqq n \leqq 3 \times 10^5),表示序列 a 的长度。
\hspace{15pt}第二行 n 个非负整数 a_i\ (0 \leqq a_i \leqq 10^9),表示序列 a

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

输出描述:

\hspace{15pt}对于每组数据,输出一个整数,表示操作结束后序列 a 中所有元素按位与的最大值。
示例1

输入

复制
2
6
1 4 5 6 2 9
5
1 1 1 1 1

输出

复制
13
1