#include<bits/stdc++.h>
using namespace std;
int t,dir[8][2]={{-2,-1},{-1,-2},{1,2},{2,1},{-1,2},{2,-1},{-2,1},{1,-2}};
char a[6][6],pd[5][5]={{'1','1','1','1','1'},{'0','1','1','1','1'},{'0','0','*','1','1'},{'0','0','0','0','1'},{'0','0','0','0','0'}};
bool flag;
int find(){
int res=0;
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++) res+=(a[i][j]!=pd[i-1][j-1]);
}
return res;
}
void dfs(int sx,int sy,int pos,int dep){
int tot=find();
if(pos+tot>dep||flag) return;
if(!tot){
flag=true;
return;
}
for(int i=0;i<=7;i++){
int fx=sx+dir[i][0],fy=sy+dir[i][1];
if(fx<1||fy<1||fx>5||fy>5) continue;
swap(a[sx][sy],a[fx][fy]);
dfs(fx,fy,pos+1,dep);
swap(a[sx][sy],a[fx][fy]);
}
}
int main(){
scanf("%d",&t);
while(t--){
int sx,sy;
flag=false;
for(int i=1;i<=5;i++) scanf("%s",a[i]+1);
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
if(a[i][j]=='*'){
sx=i;
sy=j;
}
}
}
if(!find()){
printf("0\n");
continue;
}
for(int dep=1;dep<=16;dep++){
dfs(sx,sy,0,dep);
if(flag){
printf("%d\n",dep-1);
break;
}
}
if(!flag) printf("-1\n");
}
return 0;
}
第一次交就是AC,后面交就不能AC了,除非改了一个不影响结果的地方,又会AC,但是再交就不能AC了