对于一个数组 [a1,a2,...,an](n≥1) 来说,定义 f([a1,a2,...,an])=a1⨁a2⨁⋯⨁an,即数组中所有元素按位异或运算的结果。
给你一个长度为 n 的数组 a,请问是否存在一种将数组划分成 k(k>1) 个子数组的方法。假设划分的第 i 个子数组 bi=[ali,…,ari],使得所有的划分满足 l1=1,rk=n,li≤ri,li=ri−1+1 且对于所有划分得到的 k 个子数组 b1,…,bk 来说 f(b1)=⋯=f(bk),即每一个子数组的所有元素的按位异或运算得到的结果相等。
按位异或运算是一种二进制运算方法,用符号 ⊕ 表示。对两个二进制数进行按位异或运算,规则是如果相应位上的两个数字相同则结果为 0 ,如果相应位上的两个数字不同则结果为 1。
例如,假设有两个二进制数 A=1100 和 B=1010,进行按位异或运算的为 C=0110:也就是说,A 和 B 的第一位都是 1,所以结果的第一位为 0;A 的第二位为 1,B 的第二位为 0,所以结果的第二位为 1;以此类推,可以得到最后的结果 C=0110。
Thank you, ChatGPT, for introducing us to bitwise XOR operation.
第一行,一个整数 t(1≤t≤104),代表数据组数。
对于每组数据:
第一行,一个整数 n(2≤n≤5⋅105),代表数组中数字的数量。
第二行,n 个整数 a1,a2,…,an(0≤ai≤109),代表数组 a。
保证同一测试点内 n 的总和不超过 5⋅105。
对于每组数据,假如存在合法的划分方法,输出一行 "YES",否则输出一行 "NO"。
你可以输出 "YES "和 "NO" 的任何大小写形式(例如,字符串 "yES"、"yes "和 "Yes" 都将被当作肯定的答案)。
输入样例
6
4
1 0 3 2
5
2 1 3 6 5
7
12 8 5 1 4 0 4
2
1 2
6
11 12 12 12 13 2
20
0 5 4 3 4 0 4 6 2 3 1 7 6 6 5 5 3 0 3 7
输出样例
YES
YES
YES
NO
NO
YES
提示
对于样例中第一组数据,可以采取 [[1,0],[2,3]] 的划分方式,其中 f(b1)=f(b2)=1⨁0=2⨁3=1。
对于样例中第二组数据,可以采取 [[2,1],[3],[6,5]] 的划分方式,其中 f(b1)=f(b2)=f(b3)=2⨁1=3=6⨁5=3。
对于样例中第三组数据,可以采取 [[12,8],[5,1],[4],[0,4]] 的划分方式,其中 f(b1)=f(b2)=f(b3)=f(b4)=4。