#include<bits/stdc++.h>
using namespace std;
const int dir[8][2]={1,2,2,1,2,-1,1,-2,-1,-2,-2,-1,-2,1,-1,2};
void solve(){
unordered_map<string,int>dis;
unordered_map<string,int>vis;
string ans="111110111100*110000100000";
string cur;
char c;
for(int i=1;i<=25;++i){
cin>>c;cur+=c;
}
if(cur==ans){
cout<<"0\n";
return;
}
queue<string>q;
vis[cur]=1,vis[ans]=2;
dis[cur]=0,dis[ans]=0;
q.push(cur);
q.push(ans);
while(q.size()){
string now=q.front();q.pop();
char grid[6][6];
int k=0;
int x,y;
for(int i=1;i<=5;++i){
for(int j=1;j<=5;++j){
if(now[k]=='*'){
x=i,y=j;
}
grid[i][j]=now[k++];
}
}
for(int i=0;i<8;++i){
int u=x+dir[i][0];
int v=y+dir[i][1];
if(u<1||u>5||v<1||v>5)continue;
swap(grid[x][y],grid[u][v]);
string temp="";
for(int i=1;i<=5;++i){
for(int j=1;j<=5;++j){
temp+=grid[i][j];
}
}
if(vis[temp]==vis[now]){
swap(grid[x][y],grid[u][v]);
continue;
}
if(vis[temp]+vis[now]==3){
cout<<((dis[temp]+dis[now])<=15?(dis[temp]+dis[now]+1):-1)<<"\n";
return;
}
vis[temp]=vis[now];
dis[temp]=dis[now]+1;
q.push(temp);
swap(grid[x][y],grid[u][v]);
}
}
}
int main(void){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int _;cin>>_;
while(_--){
solve();
}
return 0;
}