/*
IDA*会MLE,用的迭代加深搜索。
具体来说就是设一个可以搜索的最大深度
如果当前搜索到的深度加上预测还要搜索的深度大于这个最大深度,则不继续进行搜索
否则继续搜索,如果搜到底,则说明这个深度合法,即答案。
*/
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 10;
int len[MAXN];
int data[MAXN][MAXN];
char str[MAXN];
int cur[MAXN];
int n;
int toI(char c)
{
if(c == 'A') return 0;
else if(c == 'C') return 1;
else if(c == 'G') return 2;
else return 3;
}
int deep;
int geth()
{
int ans = 0;
for(int i = 0 ; i < n ; i++) ans = max(ans, len[i] - cur[i]);
return ans;
}
int vis[MAXN];
bool dfs(int step, int rest)
{
if(step + geth() > deep) return 0;
else if(rest == 0) return 1;
int tcur[MAXN];
for(int j = 0 ; j < n ; j++) tcur[j] = cur[j];
for(int i = 0 ; i < 4 ; i++) {
int cost = 0;
for(int j = 0 ; j < n ; j++) {
if(cur[j] < len[j] && i == data[j][cur[j]]) {
cost++;
cur[j]++;
}
}
if(cost == 0) continue;
else if(dfs(step + 1, rest - cost)) {
// printf("step = %d i = %d, rest = %d, cost = %d\n", step, i, rest, cost);
// for(int j = 0 ; j < n ; j++) printf("%d ", vis[j]);
// puts("");
return 1;
}
for(int j = 0 ; j < n ; j++) cur[j] = tcur[j];
}
return 0;
}
int main()
{
int T;
scanf("%d", &T);
while(T--) {
scanf("%d", &n);
deep = 0;
int rest = 0;
for(int i = 0 ; i < n ; i++) {
scanf("%s", str);
len[i] = strlen(str);
deep = max(deep, len[i]);
for(int j = 0 ; j < len[i] ; j++) data[i][j] = toI(str[j]);
rest += len[i];
}
memset(cur, 0, sizeof cur);
// memset(vis, 0, sizeof vis);
while(1) {
if(dfs(0, rest)) break;
deep++;
}
printf("%d\n", deep);
}
return 0;
}