#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;
}