#include<cstdio>
using namespace std;
typedef long long int ll;
int counts[1000001], dp[1000001][22], bits, maxi; // maxi is the maximum num present in array and bits is the MSB of maxi...
void initialize(){
for(int j=0; j<1000001; j++)
counts[j] = 0;
bits = 0;
maxi = 0;
return;
}
void find_bits_maxi(){
int j=1000000;
while(j >= 0 && counts[j] == 0)
j--;
maxi = j;
for(j = 22; j >= 0; j--)
if((1 << j) & maxi) break;
bits = j+1;
return;
}
int reverse_bits(int n){
int a[32];
for(int j=bits - 1; j >= 0; j--)
if(n >= (1 << j)){
n -= 1 << j;
a[j] = 1;
}
else a[j] = 0;
n = 0;
for(int j=0; j < bits; j++)
if(!a[j]) n += 1 << j;
return n;
}
void build_zeroth_of_dp(){
for(int j=0; j <= maxi; j++){
dp[j][0] = counts[reverse_bits(j)];
}
return;
}
void solve(){
find_bits_maxi();
build_zeroth_of_dp();
for(int j = 1; j <= bits; j++){
int curr_bit = j-1;
for(int k = maxi; k >= 0; k--)
if((1 << curr_bit) & k) dp[k][j] = dp[k][j-1];
else dp[k][j] = dp[k][j-1] + dp[ k ^ (1 << curr_bit) ][j];
}
ll ans = 0;
for(int j = maxi; j > 0; j--)
ans += (ll)counts[j] * (ll)dp[j][bits];
ans += (ll)counts[0] * (ll)(dp[0][bits] - 1);
printf("%lld\n",ans);
return;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
initialize();
int n;
scanf("%d",&n);
while(n--){
int temp;
scanf("%d",&temp);
counts[temp]++;
}
solve();
}
return 0;
}
I2luY2x1ZGU8Y3N0ZGlvPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIGludCBsbDsKCmludCBjb3VudHNbMTAwMDAwMV0sIGRwWzEwMDAwMDFdWzIyXSwgYml0cywgbWF4aTsJLy8gbWF4aSBpcyB0aGUgbWF4aW11bSBudW0gcHJlc2VudCBpbiBhcnJheSBhbmQgYml0cyBpcyB0aGUgTVNCIG9mIG1heGkuLi4KCnZvaWQgaW5pdGlhbGl6ZSgpewogICAgZm9yKGludCBqPTA7IGo8MTAwMDAwMTsgaisrKQogICAgICAgIGNvdW50c1tqXSA9IDA7CiAgICBiaXRzID0gMDsKICAgIG1heGkgPSAwOwogICAgcmV0dXJuOwp9Cgp2b2lkIGZpbmRfYml0c19tYXhpKCl7CiAgICBpbnQgaj0xMDAwMDAwOwogICAgd2hpbGUoaiA+PSAwICYmIGNvdW50c1tqXSA9PSAwKQogICAgICAgIGotLTsKICAgIG1heGkgPSBqOwogICAgZm9yKGogPSAyMjsgaiA+PSAwOyBqLS0pCiAgICAgICAgaWYoKDEgPDwgaikgJiBtYXhpKSBicmVhazsKICAgIGJpdHMgPSBqKzE7CiAgICByZXR1cm47Cn0KCmludCByZXZlcnNlX2JpdHMoaW50IG4pewogICAgaW50IGFbMzJdOwogICAgZm9yKGludCBqPWJpdHMgLSAxOyBqID49IDA7IGotLSkKICAgICAgICBpZihuID49ICgxIDw8IGopKXsKICAgICAgICAgICAgbiAtPSAxIDw8IGo7CiAgICAgICAgICAgIGFbal0gPSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIGFbal0gPSAwOwogICAgbiA9IDA7CiAgICBmb3IoaW50IGo9MDsgaiA8IGJpdHM7IGorKykKICAgICAgICBpZighYVtqXSkgbiArPSAxIDw8IGo7CiAgICByZXR1cm4gbjsKfQoKdm9pZCBidWlsZF96ZXJvdGhfb2ZfZHAoKXsKICAgIGZvcihpbnQgaj0wOyBqIDw9IG1heGk7IGorKyl7CiAgICAgICAgZHBbal1bMF0gPSBjb3VudHNbcmV2ZXJzZV9iaXRzKGopXTsKICAgIH0KICAgIHJldHVybjsKfQoKdm9pZCBzb2x2ZSgpewogICAgZmluZF9iaXRzX21heGkoKTsKICAgIGJ1aWxkX3plcm90aF9vZl9kcCgpOwoKICAgIGZvcihpbnQgaiA9IDE7IGogPD0gYml0czsgaisrKXsKICAgICAgICBpbnQgY3Vycl9iaXQgPSBqLTE7CiAgICAgICAgZm9yKGludCBrID0gbWF4aTsgayA+PSAwOyBrLS0pCiAgICAgICAgICAgIGlmKCgxIDw8IGN1cnJfYml0KSAmIGspIGRwW2tdW2pdID0gZHBba11bai0xXTsKICAgICAgICAgICAgZWxzZSBkcFtrXVtqXSA9IGRwW2tdW2otMV0gKyBkcFsgayBeICgxIDw8IGN1cnJfYml0KSBdW2pdOwogICAgfQoKICAgIGxsIGFucyA9IDA7CiAgICBmb3IoaW50IGogPSBtYXhpOyBqID4gMDsgai0tKQogICAgICAgIGFucyArPSAobGwpY291bnRzW2pdICogKGxsKWRwW2pdW2JpdHNdOwogICAgYW5zICs9IChsbCljb3VudHNbMF0gKiAobGwpKGRwWzBdW2JpdHNdIC0gMSk7CgogICAgcHJpbnRmKCIlbGxkXG4iLGFucyk7CiAgICByZXR1cm47Cn0KCmludCBtYWluKCl7CiAgICBpbnQgdDsKICAgIHNjYW5mKCIlZCIsJnQpOwogICAgd2hpbGUodC0tKXsKICAgICAgICBpbml0aWFsaXplKCk7CiAgICAgICAgaW50IG47CiAgICAgICAgc2NhbmYoIiVkIiwmbik7CiAgICAgICAgd2hpbGUobi0tKXsKICAgICAgICAgICAgaW50IHRlbXA7CiAgICAgICAgICAgIHNjYW5mKCIlZCIsJnRlbXApOwogICAgICAgICAgICBjb3VudHNbdGVtcF0rKzsKICAgICAgICB9CiAgICAgICAgc29sdmUoKTsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==