#include<iostream>
using namespace std;
const char goal[5][6]={{"11111"},{"01111"},{"00*11"},{"00001"},{"00000"}};
const int dx[]={1,2,2,1,-1,-2,-2,-1};
const int dy[]={2,1,-1,-2,-2,-1,1,2};
char s[5][6];int T,ans;bool flag;
inline int deal(){//估价函数(A*的标志)
int res=0;
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
if(s[i][j]!=goal[i][j]) res++;
return res;
}
void dfs(int now,int x,int y,int limit){
int c=deal();
if(now==limit){if(!c) ans=limit,flag=1;return ;}//同层的ans是一样的
if(now-1+c>limit) return ;//c个不同的至少需要c-1操作,超过限制,剪枝
for(int i=0;i<8;i++){
int nx=x+dx[i],ny=y+dy[i];
if(nx>=0&&nx<5&&ny>=0&&ny<5){
swap(s[x][y],s[nx][ny]);
if(flag) return ;//已有答案,迅速跳出
dfs(now+1,nx,ny,limit);
swap(s[x][y],s[nx][ny]);
}
}
}
int main(){
cin>>T;
while(T--){
int x,y;
ans=16;
for(int i=0;i<5;i++)
for(int j=0;j<5;j++){
cin>>s[i][j];
if(s[i][j]=='*') x=i,y=j;//空格点
}
for(int k=0;k<=15;k++){//枚举限制层数
flag=0;ans=16;
dfs(0,x,y,k);
if(ans==k)break;//前面有答案,后面就不更新了
}
cout<<(ans==16?-1:ans)<<endl;//判一下是否超过15步
}
return 0;
}