#include <iostream>
#include <vector>
#include <unordered_map>
#include <bitset>
#include<bits/stdc++.h>
const int MAX_PALINDROME = (1 << 15);
std::vector<int> generatePalindromes() {
std::vector<int> palindromes;
std::unordered_map<int, int> freq;
for (int i = 0; i < MAX_PALINDROME; i++) {
std::bitset<15> bits(i);
std::string str = bits.to_string();
std::reverse(str.begin(), str.end());
int palindrome = std::stoi(str, nullptr, 2);
palindromes.push_back(palindrome);
freq[palindrome]++;
}
return palindromes;
}
int countPalindromeXORPairs(const std::vector<int>& A, const std::vector<int>& palindromes) {
int count = 0;
std::unordered_map<int, int> freq;
for (int num : A) {
for (int palindrome : palindromes) {
int XOR = num ^ palindrome;
if (freq.count(XOR)) {
count += freq[XOR];
}
}
freq[num]++;
}
return count;
}
int main() {
int T;
std::cin >> T;
std::vector<int> palindromes = generatePalindromes();
while (T--) {
int N;
std::cin >> N;
std::vector<int> A(N);
for (int i = 0; i < N; i++) {
std::cin >> A[i];
}
int pairs = countPalindromeXORPairs(A, palindromes);
std::cout << pairs << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPGJpdHNldD4KI2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KCmNvbnN0IGludCBNQVhfUEFMSU5EUk9NRSA9ICgxIDw8IDE1KTsKCnN0ZDo6dmVjdG9yPGludD4gZ2VuZXJhdGVQYWxpbmRyb21lcygpIHsKICAgIHN0ZDo6dmVjdG9yPGludD4gcGFsaW5kcm9tZXM7CiAgICBzdGQ6OnVub3JkZXJlZF9tYXA8aW50LCBpbnQ+IGZyZXE7CiAgICAKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTUFYX1BBTElORFJPTUU7IGkrKykgewogICAgICAgIHN0ZDo6Yml0c2V0PDE1PiBiaXRzKGkpOwogICAgICAgIHN0ZDo6c3RyaW5nIHN0ciA9IGJpdHMudG9fc3RyaW5nKCk7CiAgICAgICAgc3RkOjpyZXZlcnNlKHN0ci5iZWdpbigpLCBzdHIuZW5kKCkpOwogICAgICAgIGludCBwYWxpbmRyb21lID0gc3RkOjpzdG9pKHN0ciwgbnVsbHB0ciwgMik7CiAgICAgICAgcGFsaW5kcm9tZXMucHVzaF9iYWNrKHBhbGluZHJvbWUpOwogICAgICAgIGZyZXFbcGFsaW5kcm9tZV0rKzsKICAgIH0KICAgIAogICAgcmV0dXJuIHBhbGluZHJvbWVzOwp9CgppbnQgY291bnRQYWxpbmRyb21lWE9SUGFpcnMoY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiYgQSwgY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiYgcGFsaW5kcm9tZXMpIHsKICAgIGludCBjb3VudCA9IDA7CiAgICBzdGQ6OnVub3JkZXJlZF9tYXA8aW50LCBpbnQ+IGZyZXE7CiAgICAKICAgIGZvciAoaW50IG51bSA6IEEpIHsKICAgICAgICBmb3IgKGludCBwYWxpbmRyb21lIDogcGFsaW5kcm9tZXMpIHsKICAgICAgICAgICAgaW50IFhPUiA9IG51bSBeIHBhbGluZHJvbWU7CiAgICAgICAgICAgIGlmIChmcmVxLmNvdW50KFhPUikpIHsKICAgICAgICAgICAgICAgIGNvdW50ICs9IGZyZXFbWE9SXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmcmVxW251bV0rKzsKICAgIH0KICAgIAogICAgcmV0dXJuIGNvdW50Owp9CgppbnQgbWFpbigpIHsKICAgIGludCBUOwogICAgc3RkOjpjaW4gPj4gVDsKICAgIAogICAgc3RkOjp2ZWN0b3I8aW50PiBwYWxpbmRyb21lcyA9IGdlbmVyYXRlUGFsaW5kcm9tZXMoKTsKICAgIAogICAgd2hpbGUgKFQtLSkgewogICAgICAgIGludCBOOwogICAgICAgIHN0ZDo6Y2luID4+IE47CiAgICAgICAgCiAgICAgICAgc3RkOjp2ZWN0b3I8aW50PiBBKE4pOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgIHN0ZDo6Y2luID4+IEFbaV07CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGludCBwYWlycyA9IGNvdW50UGFsaW5kcm9tZVhPUlBhaXJzKEEsIHBhbGluZHJvbWVzKTsKICAgICAgICBzdGQ6OmNvdXQgPDwgcGFpcnMgPDwgc3RkOjplbmRsOwogICAgfQogICAgCiAgICByZXR1cm4gMDsKfQo=