小T数星星
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

\hspace{15pt}小 T 和她的朋友小 U 在看天文台看星星。
\hspace{15pt}天上有 n 颗星星,第 i 颗星星的亮度为 a_i 。现在小 T 想把这些星星分组。
\hspace{15pt}具体地,她每次可以选取若干颗还未分组的星星(任意选取,不需要连续),如果它们满足:
\hspace{23pt}\bullet\,记一共选取了 m 颗星星,它们的亮度分别是 c_1,c_2,...,c_m
\hspace{23pt}\bullet\, c_1 \oplus c_2 \oplus \cdots \oplus c_m \neq 0
\hspace{23pt}\bullet\, \operatorname{lcm}(c_1,c_2,\cdots,c_m) + (c_1 \oplus c_2 \oplus \cdots \oplus c_m) = 2 \times \min(c_1,c_2,\cdots,c_m)
\hspace{15pt}那么小 T 就可以将这些星星分为一组。
\hspace{15pt}小 T 想要让每颗星星都被分到某一组里,请问她最少需要分多少组?

\hspace{15pt}本题有多组数据,你需要对每组数据都求出对应的结果。

\hspace{15pt}在本题中,\min 指最小数,例如 \min(4,6,8)=4\text{lcm} 指最小公倍数,例如 \text{lcm}(2,3,4)=12\oplus 表示按位异或运算。
\hspace{15pt}如果您需要更多最小公倍数相关的知识,请参考 OI-Wiki:最小公倍数 ;如果您需要更多位运算相关的知识,请参考 OI-Wiki:与、或、异或

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T \left(1 \le T \le 10^4\right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}第一行输入一个整数 n \left(1 \le n \le 10^5\right) 代表星星的数量。
\hspace{15pt}第二行输入 n 个整数 a_1,a_2,...,a_n \left(1 \le a_i \le 10^9\right) 代表每颗星星的亮度。

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

输出描述:

\hspace{15pt}对于每一组数据,在单独的一行上输出一个整数,代表最少需要分出的组数。
示例1

输入

复制
2
2
1 2
5
1 1 4 5 1

输出

复制
2
3

说明

\hspace{15pt}对于第一组测试数据:
\hspace{23pt}\bullet\,1 \oplus 2 = 3 ,第一个条件满足;
\hspace{23pt}\bullet\,等式左边 \operatorname{lcm}(1,2) + (1 \oplus 2) = 2 + 3 = 5 ;等式右边 2 \times \min(1,2) = 2 ,第二个条件不满足。
\hspace{15pt}综上,这两个数字不能分配到同一组,所以至少需要分出 2 组。