#include<bits/stdc++.h>
using namespace std;
constexpr int dx[]={1,1,-1,-1,2,2,-2,-2},dy[]={2,-2,2,-2,1,-1,1,-1},fin[5][5]={
{1,1,1,1,1},
{0,1,1,1,1},
{0,0,2,1,1},
{0,0,0,0,1},
{0,0,0,0,0}
};
int T,maxs,bx,by;
char now[5][5];
int eval(){
int ret=0;
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
if(now[i][j]!=2&&now[i][j]!=fin[i][j])
ret++;
return ret;
}
bool check(int x,int y){
return 0<=x&&x<5&&0<=y&&y<5;
}
bool dfs(int x,int y,int dep){
int ev=eval();
if(dep+ev>maxs)
return 0;
if(!ev)
return 1;
for(int i=0,nx,ny,t;i<8;i++){
nx=x+dx[i],ny=y+dy[i];
if(check(nx,ny)){
swap(now[x][y],now[nx][ny]);
t=dfs(nx,ny,dep+1);
swap(now[x][y],now[nx][ny]);
if(t)
return 1;
}
}
return 0;
}
void Main(){
for(int i=0;i<5;i++){
for(int j=0;j<5;j++){
cin>>now[i][j];
if(now[i][j]=='*'){
now[i][j]=2,
bx=i,by=j;
}
else
now[i][j]-='0';
}
}
for(int maxs=0;maxs<=15;maxs++){
if(dfs(bx,by,0)){
cout<<maxs<<'\n';
return;
}
}
cout<<"-1\n";
return;
}
int main(){
for(cin>>T;T;--T)
Main();
return 0;
}