#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[26],v[26],dx[5]={0,-1,0,1,0},dy[5]={0,0,1,0,-1};
char p[6][6],m[7][7];int ans[510];
ll minn=99999,flag=0;
int check(ll a[],ll t){
for(int i=1;i<=t;i++){
ll x=ceil(a[i]/5.0),y=a[i]%5==0?5:a[i]%5;
for(int j=0;j<=4;j++){
ll tx=x+dx[j],ty=y+dy[j];
if(m[tx][ty]!='2'){
m[tx][ty]=!(m[tx][ty]-48)+48;
}
}
}
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
if(m[i][j]=='0')return 0;
}
}
return 1;
}
void dfs(ll k){
if(check(a,k-1)){
minn=k-1;
flag=1;
return;
}
if(k>6)return;
for(ll i=1;i<=5;i++)
for(ll j=1;j<=5;j++)m[i][j]=p[i][j];
for(ll i=1;i<=25;i++){
if(v[i]==0&&i>a[k-1]){
v[i]=1;
a[k]=i;
dfs(k+1);
if(flag)return;
v[i]=0;
a[k]=0;
}
}
}
int main(){
ll n;
cin>>n;fflush(stdin);
for(int i=0;i<=7;i++)
for(int j=0;j<=7;j++)m[i][j]='2';
for(int i=1;i<=n;i++){
for(int j=1;j<=5;j++){
for(int k=1;k<=5;k++){
cin>>p[j][k];
m[j][k]=p[j][k];
}
if(i!=n||j!=5)getchar();
}
dfs(1);
if(minn!=99999)ans[i]=minn;
else ans[i]=-1;
getchar();
minn=99999;
flag=0;
for(int i=1;i<=25;i++)a[i]=0;
for(ll i=1;i<=5;i++)
for(ll j=1;j<=5;j++)m[i][j]=p[i][j];
}
for(int i=1;i<=n;i++)cout<<ans[i]<<endl;
}