#include<bits/stdc++.h>
using namespace std;
int par[505];
int khoj_rep(int r)
{
if(par[r]==r)
{
return r;
}
else
{
return par[r] = khoj_rep(par[r]);
}
}
struct data
{
int a,b,c,d;
}store[505];
struct data1
{
int u,v,cost;
}arr[250000];
bool cmp(data1 lhs,data1 rhs)
{
return lhs.cost<rhs.cost;
}
int main()
{
long test,n,i,j,k,cnt,cnt1,counter,rolls,tmp,tmp1,tmp2,u,v,sub,tag;
char a,b,c,d;
cin>>test;
while(test--)
{
cin>>n;
store[0].a=0;
store[0].b=0;
store[0].c=0;
store[0].d=0;
for(i=1;i<=n;i++)
{
cin>>a>>b>>c>>d;
store[i].a=a-48;
store[i].b=b-48;
store[i].c=c-48;
store[i].d=d-48;
}
for(i=0;i<=n;i++)
{
par[i]=i;
}
k=0;
for(i=0;i<=n;i++)
{
cnt=0;
for(j=i+1;j<=n;j++)
{
tmp=max(store[i].a,store[j].a);
tmp2=min(store[i].a,store[j].a);
tmp1=abs(store[i].a-store[j].a);
sub=10-tmp+tmp2;
cnt1=min(tmp1,sub);
cnt+=cnt1;
tmp=max(store[i].b,store[j].b);
tmp2=min(store[i].b,store[j].b);
tmp1=abs(store[i].b-store[j].b);
sub=10-tmp+tmp2;
cnt1=min(tmp1,sub);
cnt+=cnt1;
tmp=max(store[i].c,store[j].c);
tmp2=min(store[i].c,store[j].c);
tmp1=abs(store[i].c-store[j].c);
sub=10-tmp+tmp2;
cnt1=min(tmp1,sub);
cnt+=cnt1;
tmp=max(store[i].d,store[j].d);
tmp2=min(store[i].d,store[j].d);
tmp1=abs(store[i].d-store[j].d);
sub=10-tmp+tmp2;
cnt1=min(tmp1,sub);
cnt+=cnt1;
arr[k].u=i;
arr[k].v=j;
arr[k].cost=cnt;
k++;
cnt=0;
}
}
sort(arr,arr+k,cmp);
counter=0;
rolls=0;
tag=0;
for(i=0;i<k;i++)
{
u=khoj_rep(arr[i].u);
v=khoj_rep(arr[i].v);
if(u!=v && tag==0)
{
par[u]=v;
rolls+=arr[i].cost;
if(arr[i].u==0)
{
tag=1;
}
}
else if(u!=v && arr[i].u>0)
{
par[u]=v;
rolls+=arr[i].cost;
counter++;
if(counter==n)
{
break;
}
}
}
cout<<rolls<<endl;
memset(par,0,sizeof(par));
}
return 0;
}