from collections import defaultdict
t=int(input())
for _ in range(t):
n=int(input())
d=defaultdict(int)
f=defaultdict(int)
sec=defaultdict(int)
s=set([])
for i in range(n):
x=input().strip()
d[x]+=1
f[x[0]]+=1
sec[x[1]]+=1
s.add(x)
ans=0
for i in 'abcdefghijk':
ans+=f[i]*(f[i]-1)//2
ans+=sec[i]*(sec[i]-1)//2
for i in s:
ans-=d[i]*(d[i]-1)
print(ans)
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#define ll long long
#define pb push_back
#define fr(a,b) for(int i = a; i < b; i++)
#define rep(i,a,b) for(int i = a; i < b; i++)
#define mod 1000000007
#define inf (1LL<<60)
#define all(x) (x).begin(), (x).end()
#define prDouble(x) cout << fixed << setprecision(10) << x
#define triplet pair<ll,pair<ll,ll>>
#define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL)
using namespace std;
using namespace __gnu_pbds;
typedef tree<int,null_type,greater_equal<int>,rb_tree_tag,tree_order_statistics_node_update>ordered_set;//find by order // order of key
int main(){
fast_io;
int t;cin>>t;
while(t--){
ll n;cin>>n;
vector<string> str(n);
map<string,int>mp;
map<char,int>st,end;
for(int i=0;i<n;i++){
cin>>str[i];
}
ll cnt =0;
for(int i=0;i<n;i++){
cnt+=st[str[i][0]]+end[str[i][1]]-2*mp[str[i]];
mp[str[i]]++;
st[str[i][0]]++;
end[str[i][1]]++;
}
cout<<cnt<<endl;
}
return 0;
}
946. Validate Stack Sequences | 921. Minimum Add to Make Parentheses Valid |
881. Boats to Save People | 497. Random Point in Non-overlapping Rectangles |
528. Random Pick with Weight | 470. Implement Rand10() Using Rand7() |
866. Prime Palindrome | 1516A - Tit for Tat |
622. Design Circular Queue | 814. Binary Tree Pruning |
791. Custom Sort String | 787. Cheapest Flights Within K Stops |
779. K-th Symbol in Grammar | 701. Insert into a Binary Search Tree |
429. N-ary Tree Level Order Traversal | 739. Daily Temperatures |
647. Palindromic Substrings | 583. Delete Operation for Two Strings |
518. Coin Change 2 | 516. Longest Palindromic Subsequence |
468. Validate IP Address | 450. Delete Node in a BST |
445. Add Two Numbers II | 442. Find All Duplicates in an Array |
437. Path Sum III | 436. Find Right Interval |
435. Non-overlapping Intervals | 406. Queue Reconstruction by Height |
380. Insert Delete GetRandom O(1) | 332. Reconstruct Itinerary |