#include <bits/stdc++.h>
namespace bijiEnak {
using namespace std;
using ll = long long;
using ull = unsigned long long;
#define vi vector<int>
#define mpii map<int, int>
#define int long long // on or off
#define vl vector<ll>
#define pii pair<int, int>
#define fr first
#define sc second
#define pq priority_queue
#define mpr make_pair
#define biji ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define fillArr1D(ar, in, n) for(int i = 0; i < n; i++) ar[i] = in
#define fillArr2D(ar, in, n, m) for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) ar[i][j] = in
#define fillArr3D(ar, in, n, m, o) for(int i = 0; i < n; i++) for(int j = 0; j < m; j++) for(int k = 0; k < o; k++) ar[i][j][k] = in
//lower_bound(x) : >= x
//upper_bound(x) : > x
const int MOD = 1e9 + 7;
const int MAXN = 2e5 + 1;
const string input = {'_', 'i', 'n', 'p', 'u', 't', '.', 't', 'x', 't'};
const string output = {'_', 'o', 'u', 't', 'p', 'u', 't', '.', 't', 'x', 't'};
const string input_r = {'r'};
const string output_w = {'w'};
}
using namespace bijiEnak;
bool isQuad(int x) {
int tmp = sqrt(x);
return (x == (tmp*tmp));
}
void tcsolve() {
int N; cin >> N;
vector<int> vc(N); for(auto& i : vc) cin >> i;
for(int i = 1; i < N; i++) vc[i] = vc[i]^vc[i-1];
vector<int> quad;
for(int i = 1; i <= N; i++)
if(isQuad(i)) quad.push_back(i);
set<int> adj[4*N+4];
for(auto i : quad) {
for(auto j : vc) {
adj[j].insert(i^j);
adj[j].insert(j);
}
}
for(auto i : vc) {
cout << i << " -> ";
for(auto x : adj[i]) cout << x << " ";
cout << "\n";
}
int sum = (isQuad(vc[0]) ? 1 : 0);
set<int> st; vector<int> freq(4*N+4, 0);
st.insert(vc[0]); freq[vc[0]]++;
for(int i = 1; i < N; i++) {
if(isQuad(vc[i])) sum++;
for(auto x : adj[vc[i]]) {
auto it = st.lower_bound(x);
if(it == st.end()) continue;
sum += freq[x];
}
st.insert(vc[i]); freq[vc[i]]++;
}
int ans = (N*(N+1)) / 2;
cout << ans-sum << "\n";
}
signed main() {
// freopen(input.c_str(), input_r.c_str(), stdin);
// freopen(output.c_str(), output_w.c_str(), stdout);
biji int t = 1;
cin >> t;
while(t--) tcsolve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cm5hbWVzcGFjZSBiaWppRW5hayB7CiAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOwogICAgdXNpbmcgbGwgPSBsb25nIGxvbmc7CiAgICB1c2luZyB1bGwgPSB1bnNpZ25lZCBsb25nIGxvbmc7CiAgICAjZGVmaW5lIHZpIHZlY3RvcjxpbnQ+CiAgICAjZGVmaW5lIG1waWkgbWFwPGludCwgaW50PgogICAgI2RlZmluZSBpbnQgbG9uZyBsb25nIC8vIG9uIG9yIG9mZgogICAgI2RlZmluZSB2bCB2ZWN0b3I8bGw+CiAgICAjZGVmaW5lIHBpaSBwYWlyPGludCwgaW50PgogICAgI2RlZmluZSBmciBmaXJzdAogICAgI2RlZmluZSBzYyBzZWNvbmQKICAgICNkZWZpbmUgcHEgcHJpb3JpdHlfcXVldWUKICAgICNkZWZpbmUgbXByIG1ha2VfcGFpcgogICAgI2RlZmluZSBiaWppIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpO2Npbi50aWUoTlVMTCk7Y291dC50aWUoTlVMTCk7ICAgIAogICAgI2RlZmluZSBmaWxsQXJyMUQoYXIsIGluLCBuKSBmb3IoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSBhcltpXSA9IGluCiAgICAjZGVmaW5lIGZpbGxBcnIyRChhciwgaW4sIG4sIG0pIGZvcihpbnQgaSA9IDA7IGkgPCBuOyBpKyspIGZvcihpbnQgaiA9IDA7IGogPCBtOyBqKyspIGFyW2ldW2pdID0gaW4KICAgICNkZWZpbmUgZmlsbEFycjNEKGFyLCBpbiwgbiwgbSwgbykgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykgZm9yKGludCBqID0gMDsgaiA8IG07IGorKykgZm9yKGludCBrID0gMDsgayA8IG87IGsrKykgYXJbaV1bal1ba10gPSBpbgogICAgLy9sb3dlcl9ib3VuZCh4KSA6ID49IHgKICAgIC8vdXBwZXJfYm91bmQoeCkgOiA+IHgKICAgIGNvbnN0IGludCBNT0QgPSAxZTkgKyA3OwogICAgY29uc3QgaW50IE1BWE4gPSAyZTUgKyAxOwogICAgY29uc3Qgc3RyaW5nIGlucHV0ID0geydfJywgJ2knLCAnbicsICdwJywgJ3UnLCAndCcsICcuJywgJ3QnLCAneCcsICd0J307CiAgICBjb25zdCBzdHJpbmcgb3V0cHV0ID0geydfJywgJ28nLCAndScsICd0JywgJ3AnLCAndScsICd0JywgJy4nLCAndCcsICd4JywgJ3QnfTsKICAgIGNvbnN0IHN0cmluZyBpbnB1dF9yID0geydyJ307CiAgICBjb25zdCBzdHJpbmcgb3V0cHV0X3cgPSB7J3cnfTsKfQp1c2luZyBuYW1lc3BhY2UgYmlqaUVuYWs7CiAgICAKYm9vbCBpc1F1YWQoaW50IHgpIHsKICAgIGludCB0bXAgPSBzcXJ0KHgpOwogICAgcmV0dXJuICh4ID09ICh0bXAqdG1wKSk7Cn0KCnZvaWQgdGNzb2x2ZSgpIHsKICAgIGludCBOOyBjaW4gPj4gTjsKICAgIHZlY3RvcjxpbnQ+IHZjKE4pOyBmb3IoYXV0byYgaSA6IHZjKSBjaW4gPj4gaTsKICAgIGZvcihpbnQgaSA9IDE7IGkgPCBOOyBpKyspIHZjW2ldID0gdmNbaV1edmNbaS0xXTsKCiAgICB2ZWN0b3I8aW50PiBxdWFkOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBOOyBpKyspCiAgICAgICAgaWYoaXNRdWFkKGkpKSBxdWFkLnB1c2hfYmFjayhpKTsKCiAgICBzZXQ8aW50PiBhZGpbNCpOKzRdOwogICAgZm9yKGF1dG8gaSA6IHF1YWQpIHsKICAgICAgICBmb3IoYXV0byBqIDogdmMpIHsKICAgICAgICAgICAgYWRqW2pdLmluc2VydChpXmopOwogICAgICAgICAgICBhZGpbal0uaW5zZXJ0KGopOwogICAgICAgIH0KICAgIH0KCiAgICBmb3IoYXV0byBpIDogdmMpIHsKICAgICAgICBjb3V0IDw8IGkgPDwgIiAtPiAiOwogICAgICAgIGZvcihhdXRvIHggOiBhZGpbaV0pIGNvdXQgPDwgeCA8PCAiICI7CiAgICAgICAgY291dCA8PCAiXG4iOwogICAgfQoKICAgIGludCBzdW0gPSAoaXNRdWFkKHZjWzBdKSA/IDEgOiAwKTsKICAgIHNldDxpbnQ+IHN0OyB2ZWN0b3I8aW50PiBmcmVxKDQqTis0LCAwKTsKCiAgICBzdC5pbnNlcnQodmNbMF0pOyBmcmVxW3ZjWzBdXSsrOwogICAgZm9yKGludCBpID0gMTsgaSA8IE47IGkrKykgewogICAgICAgIGlmKGlzUXVhZCh2Y1tpXSkpIHN1bSsrOwogICAgICAgIGZvcihhdXRvIHggOiBhZGpbdmNbaV1dKSB7CiAgICAgICAgICAgIGF1dG8gaXQgPSBzdC5sb3dlcl9ib3VuZCh4KTsKICAgICAgICAgICAgaWYoaXQgPT0gc3QuZW5kKCkpIGNvbnRpbnVlOwogICAgICAgICAgICBzdW0gKz0gZnJlcVt4XTsKICAgICAgICB9CiAgICAgICAgc3QuaW5zZXJ0KHZjW2ldKTsgZnJlcVt2Y1tpXV0rKzsKICAgIH0KCiAgICBpbnQgYW5zID0gKE4qKE4rMSkpIC8gMjsKICAgIGNvdXQgPDwgYW5zLXN1bSA8PCAiXG4iOwp9CiAgICAKc2lnbmVkIG1haW4oKSB7CiAgICAvLyBmcmVvcGVuKGlucHV0LmNfc3RyKCksIGlucHV0X3IuY19zdHIoKSwgc3RkaW4pOwogICAgLy8gZnJlb3BlbihvdXRwdXQuY19zdHIoKSwgb3V0cHV0X3cuY19zdHIoKSwgc3Rkb3V0KTsKICAgIAogICAgYmlqaSBpbnQgdCA9IDE7CiAgICBjaW4gPj4gdDsKICAgIHdoaWxlKHQtLSkgdGNzb2x2ZSgpOwogICAgCiAgICByZXR1cm4gMDsKfQ==