#include<iostream> #include<cstring> using namespace std; char map[11][33]; int case_num,N,vis[11],len[11],addlen[11][11]; int mintotal; void add(int m, int n) { int maxcomlen=0; for(int i=1;i<=len[m]&&i<=len[n];i++) { int flag=1; for(int j=0,k=len[m]-i;j<i;j++,k++) { if(map[m][k]!=map[n][j]) { flag=0; break; } } if(flag==1) maxcomlen=i; } addlen[m][n]=len[n]-maxcomlen; } void dfs(int step, int sum, int pre) { if(sum>=mintotal) return; if(step==N) { if(sum<mintotal) mintotal=sum; return; } for(int i=0;i<N;i++) { if(vis[i]==0) { vis[i]=1; dfs(step+1,sum+addlen[pre][i],i); vis[i]=0; } } } int main() { //freopen("in.txt","r",stdin); cin>>case_num; while(case_num--) { cin>>N; for(int i=0;i<N;i++) { cin>>map[i]; len[i]=strlen(map[i]); } for(int i=0;i<N;i++) for(int j=0;j<N;j++) add(i,j); for(int i=0;i<N;i++) vis[i]=0; mintotal=9999; for(int i=0;i<N;i++) { vis[i]=1; dfs(1,len[i],i); vis[i]=0; } cout<<mintotal<<endl; } return 0; }