#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define ms(arr,a) memset(arr,a,sizeof arr)
#define debug(x) cout<<"< "#x" = "<<x<<" >"<<endl
char s[16][17],tmp[4][5];
void rot(int x,int y)
{
for(int i=0;i<4;++i)
for(int j=0;j<4;++j)
tmp[i][j]=s[4*x-1-j][4*y-4+i];
for(int i=0;i<4;++i)
for(int j=0;j<4;++j)
s[4*x-4+i][4*y-4+j]=tmp[i][j];
}
bool judge(int x,int y)
{
int a[20];
for(int i=4*x-4;i<4*x;++i)
{
ms(a,0);
for(int j=0;j<4*y;++j)
{
if(a[s[i][j]]>0)return false;
a[s[i][j]]++;
}
}
for(int i=4*y-4;i<4*y;++i)
{
ms(a,0);
for(int j=0;j<4*x;++j)
{
if(a[s[j][i]]>0)return false;
a[s[j][i]]++;
}
}
return true;
}
int ans;
void dfs(int x,int y,int now)
{
if(now>=ans)return;
if(x==5){ans=min(ans,now);return;}
if(y==5){dfs(x+1,1,now);return;}
for(int i=0;i<4;++i)
{
if(judge(x,y))dfs(x,y+1,now+i);
rot(x,y);
}
}
int main()
{
int T;scanf("%d",&T);
while(T--)
{
ans=100;
for(int i=0;i<16;++i)scanf("%s",s[i]);
for(int i=0;i<16;++i)
for(int j=0;j<16;++j)
{
if(isdigit(s[i][j]))s[i][j]-=48;
else s[i][j]-=55;
}
dfs(1,1,0);
printf("%d
",ans);
}
}