#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int testCases;
cin >> testCases;
while (testCases--) {
int n;
cin >> n;
vector<int> arr(n + 1);
for (int i = 1; i <= n; i++) cin >> arr[i];
vector<int> prefixXor(n + 1, 0);
for (int i = 1; i <= n; i++) {
prefixXor[i] = prefixXor[i - 1] ^ arr[i];
}
vector<int> leftZeroXorCount(n + 1, 0);
vector<int> rightZeroXorCount(n + 1, 0);
int currentXor = 0;
unordered_map<int, int> xorFrequency;
xorFrequency[currentXor] = 1;
long long totalZeroXorSubarrays = 0;
for (int i = 1; i <= n; i++) {
currentXor ^= arr[i];
totalZeroXorSubarrays += xorFrequency[currentXor];
xorFrequency[currentXor]++;
}
for (int i = 1; i <= n; i++) {
int count = 0;
for (int l = 1; l <= i; l++) {
if ((prefixXor[i] ^ prefixXor[l - 1]) == 0) {
count++;
}
}
leftZeroXorCount[i] = count;
}
for (int i = n; i >= 1; i--) {
int count = 0;
for (int r = i; r <= n; r++) {
if ((prefixXor[r] ^ prefixXor[i - 1]) == 0) {
count++;
}
}
rightZeroXorCount[i] = count;
}
for (int i = 1; i < n; i++) {
totalZeroXorSubarrays += (long long)leftZeroXorCount[i] * rightZeroXorCount[i + 1];
}
long long totalTriplets = (1LL * n * (n + 1) * (n + 2)) / 6;
long long result = totalTriplets - totalZeroXorSubarrays;
cout << result << "\n";
}
return 0;
}