#include <bits/stdc++.h>
using namespace std;
using int64 = long long;
int64 zeroXorSegments(vector<int64>& data) {
unordered_map<int64, int64> freq;
int64 prefix = 0, zeroCount = 0;
freq[0] = 1;
for (auto num : data) {
prefix ^= num;
if (freq.count(prefix)) zeroCount += freq[prefix];
freq[prefix]++;
}
return zeroCount;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int64 testCases;
cin >> testCases;
while (testCases--) {
int64 len;
cin >> len;
vector<int64> seq(len);
for (int64 i = 0; i < len; i++) cin >> seq[i];
vector<int64> prefixXor(len + 1, 0);
for (int64 i = 1; i <= len; i++)
prefixXor[i] = prefixXor[i - 1] ^ seq[i - 1];
vector<int64> leftZero(len + 1, 0);
for (int64 i = 1; i <= len; i++) {
int64 localCount = 0;
for (int64 start = 1; start <= i; start++) {
if ((prefixXor[i] ^ prefixXor[start - 1]) == 0)
localCount++;
}
leftZero[i] = localCount;
}
vector<int64> rightZero(len + 2, 0);
for (int64 i = 1; i <= len; i++) {
int64 localCount = 0;
for (int64 end = i; end <= len; end++) {
if ((prefixXor[end] ^ prefixXor[i - 1]) == 0)
localCount++;
}
rightZero[i] = localCount;
}
int64 invalidTriplets = 0;
for (int64 i = 1; i < len; i++)
invalidTriplets += leftZero[i] * rightZero[i + 1];
invalidTriplets += zeroXorSegments(seq);
int64 allTriplets = (len * (len + 1) * (len + 2)) / 6;
int64 validTriplets = allTriplets - invalidTriplets;
cout << validTriplets << "\n";
}
return 0;
}