import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextLine()) {
int n = Integer.parseInt(sc.nextLine());
int[] arr = new int[n];
for (int i = 0; i < n; i++) {
long m = Long.parseLong(sc.nextLine());
String str = sc.nextLine();
arr[i] = f5(str.split(" "));
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
private static int f5(String[] arr) {
// 使用mao保存网络集合,key为网络范围,value为网络中的账号数量
Map<Long, Integer> netMap = new HashMap<>();
// 遍历账号
for (int i = 0; i < arr.length; i++) {
// 当前账号
long account = Long.parseLong(arr[i]);
// 当前网络范围等于当前账号
long netKey = account;
// 定义集合用于临时存储需要移除的网络范围,减少循环数量
List<Long> removeNet = new ArrayList<>();
// 定义账号数量
int count = 1;
// 遍历网络,判断当前账号是否在网络当中
for (Long net : netMap.keySet()) {
if ((net & netKey) >= 1) {
// 当前账号在网络中,使用按位或运算合并网络,将当前网络的范围扩大.
netKey = netKey | net;
// 当前网络的账号数量为,当前账号数量加上合并的网络中的账号数量
count = count + netMap.get(net);
// 移除小范围的网络,减少后续遍历数量
removeNet.add(net);
}
}
// 移除小范围的网络
removeNet.forEach(net -> netMap.remove(net));
// 添加当前网络范围到集合当中
netMap.put(netKey, count);
}
// 返回网络范围集合当中包含最多网络数量的值
return netMap.values().stream().max(Integer::compareTo).orElse(1);
}
}