#include <bits/stdc++.h>
#define ll long long int
using namespace std;
const ll MOD = 998244353 ;
const int N = 1e3 + 5;
//EAZY..PIZZIIEE
struct Trie{
int count;
Trie * child[676];
Trie(){
for(int i = 0; i < 676; ++i) child[i] = NULL;
this->count = 0;
}
};
Trie * head = new Trie();
void insert(vector<int> &a){
Trie * curr = head;
for(auto & x: a){
if( !curr->child[x] )
curr->child[x] = new Trie();
curr = curr -> child[x];
}
curr->count++;
}
ll dfs(Trie * cur, int lp = 0){
ll ans = 0;
for(int i = 0; i < 656; ++i){
if( cur->child[i]) {
ans += dfs(cur->child[i], lp + 1);
cur->count += cur->child[i]->count;
}
}
while( cur->count >= 2){
cur->count -= 2;
ans += lp * lp;
}
return ans;
}
void solve(){
int n; cin >> n;
vector<string> s(n);
for(int i = 0; i < n; ++i){
cin >> s[i];
}
//vector<int> a(n);
for(int i = 0;i < n; ++i){
vector<int> a = vector<int>(s[i].size());
string t = s[i];
reverse(t.begin(), t.end());
for(int j = 0; j < s[i].size(); ++j){
a[j] = (s[i][j] - 'a')*26 + (t[j] - 'a');
}
//insert this string into trie
insert(a);
}
dfs(head);
}
int main(){
int t; cin >> t;
while(t--)
solve();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nIGludAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGxsIE1PRCA9IDk5ODI0NDM1MyA7CmNvbnN0IGludCBOID0gMWUzICsgNTsKLy9FQVpZLi5QSVpaSUlFRQoKc3RydWN0IFRyaWV7CiAgICBpbnQgY291bnQ7CiAgICBUcmllICogY2hpbGRbNjc2XTsKICAgIFRyaWUoKXsKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgNjc2OyArK2kpIGNoaWxkW2ldID0gTlVMTDsKICAgICAgICB0aGlzLT5jb3VudCA9IDA7CiAgICB9Cn07CgpUcmllICogaGVhZCA9IG5ldyBUcmllKCk7Cgp2b2lkIGluc2VydCh2ZWN0b3I8aW50PiAmYSl7CiAgICBUcmllICogY3VyciA9IGhlYWQ7CiAgICBmb3IoYXV0byAmIHg6IGEpewogICAgICAgIGlmKCAhY3Vyci0+Y2hpbGRbeF0gKQogICAgICAgICAgICBjdXJyLT5jaGlsZFt4XSA9IG5ldyBUcmllKCk7CiAgICAgICAgY3VyciA9IGN1cnIgLT4gY2hpbGRbeF07CiAgICB9CiAgICBjdXJyLT5jb3VudCsrOwp9CgpsbCBkZnMoVHJpZSAqIGN1ciwgaW50IGxwID0gMCl7CiAgICBsbCBhbnMgPSAwOwogICAgCiAgICBmb3IoaW50IGkgPSAwOyBpIDwgNjU2OyArK2kpewogICAgICAgIGlmKCBjdXItPmNoaWxkW2ldKSB7CiAgICAgICAgICAgIGFucyArPSBkZnMoY3VyLT5jaGlsZFtpXSwgbHAgKyAxKTsKICAgICAgICAgICAgY3VyLT5jb3VudCArPSBjdXItPmNoaWxkW2ldLT5jb3VudDsgCiAgICAgICAgfQogICAgfQogICAgCiAgICB3aGlsZSggY3VyLT5jb3VudCA+PSAyKXsKICAgICAgICBjdXItPmNvdW50IC09IDI7CiAgICAgICAgYW5zICs9IGxwICogbHA7CiAgICB9CiAgICByZXR1cm4gYW5zOwp9CgoKdm9pZCBzb2x2ZSgpewogICAgaW50IG47IGNpbiA+PiBuOwogICAgdmVjdG9yPHN0cmluZz4gcyhuKTsKICAgIGZvcihpbnQgaSA9IDA7IGkgPCBuOyArK2kpewogICAgICAgIGNpbiA+PiBzW2ldOwogICAgfQogICAgLy92ZWN0b3I8aW50PiBhKG4pOwogICAgZm9yKGludCBpID0gMDtpIDwgbjsgKytpKXsKICAgICAgICB2ZWN0b3I8aW50PiBhID0gdmVjdG9yPGludD4oc1tpXS5zaXplKCkpOwogICAgICAgIHN0cmluZyB0ID0gc1tpXTsKICAgICAgICByZXZlcnNlKHQuYmVnaW4oKSwgdC5lbmQoKSk7CiAgICAgICAgZm9yKGludCBqID0gMDsgaiA8IHNbaV0uc2l6ZSgpOyArK2opewogICAgICAgICAgICBhW2pdID0gKHNbaV1bal0gLSAnYScpKjI2ICsgKHRbal0gLSAnYScpOwogICAgICAgIH0KICAgICAgICAvL2luc2VydCB0aGlzIHN0cmluZyBpbnRvIHRyaWUKICAgICAgICBpbnNlcnQoYSk7CiAgICB9CiAgICBkZnMoaGVhZCk7Cn0KCmludCBtYWluKCl7CiAgICBpbnQgdDsgY2luID4+IHQ7CiAgICB3aGlsZSh0LS0pCiAgICAgICAgc29sdmUoKTsKfQ==