题面描述
给定一个长度为 n 的数组 a ,我们定义:
- f(a)=a1⊕a2⊕⋯⊕an (⊕ 表示按位异或)
- g(a)=gcd(a1,a2,…,an) (gcd 表示所有元素的最大公约数)
我们需要从数组 a 中选取一个 非空的连续子数组 b ,使得
f(b)×g(b)
题目内容
小苯有一个长度为n的数组a。他定义:
f(a)=a1⊕a2⊕...⊕an。(即所有数字的异或和).
g(a)=gcd(a1,a2,.,an)。(即所有数字的最大公约数)。
现在小苯希望你从a中选择一个非空子数组b(子数组需满足连续),满足子数组的f(b)⋅g(b)尽可能大,请你帮他算一算这个最大值吧。
输入描述
第一行一个正整数T(1≤T≤1000),表示测试数据的组数。
接下来对于每组测试数据,输入包含两行。
第一行一个正整数n(1≤n≤2×105),表示数组a的长度。
第二行n个整数ai(0≤ai≤109),表示数组a。
(保证所有测试数据中n的总和不超过3×105。)
输出描述
对于每组测试数据,输出一行一个整数表示最大的f(b)⋅g(b)值.
补充说明
注意:gcd(0,x)=x,即0与任意数x的最大公约数都是任意数x。
样例1
输入
1
4
1 1 1 1
输出
1
说明
可以选择区间[1,3]对应子数组为1,1,1,f和g值都为1,乘积也为1,可以证明不存在更优的答案。