#include <bits/stdc++.h>
#define int long long
using namespace std ;
int goal[7][7]={
0,0,0,0,0,0,0,
0,1,2,2,2,2,0,
0,1,1,3,2,2,0,
0,1,1,1,1,2,0,
0,1,1,1,1,1,0,
0,0,0,0,0,0,0,
};
int t , ans ;
struct MP{
int mp[7][7];
};
inline int check( MP aa ){
int ans = 0 ;
for(int i=1;i<=5;++i){
for(int j=1;j<=5;++j){
ans+=(aa.mp[i][j]!=goal[i][j]);
}
}
return (ans+1)>>1;
}
int movex[10]={0,-2,-1,1,2,2,1,-1,-2,0};
int movey[10]={0,1,2,2,1,-1,-2,-2,-1,0};
inline void IDa_star( int aim_deep , int now_deep , MP aa ){
int fx=check(aa);
if(now_deep>=ans){
return;
}
if(fx==0){
ans=min(ans,now_deep);
return ;
}
if( now_deep+fx >= aim_deep ){
return ;
}
int x , y ;
bool mar = false ;
for(int i=1;i<=5;++i){
for(int j=1;j<=5;++j){
if(aa.mp[i][j]==3){
x=i;
y=j;
mar=true;
break;
}
}
}
for(int i=1;i<=8;i++){
if(x+movex[i]>5||x+movex[i]<1||y+movey[i]>5||y+movey[i]<1){
continue ;
}
swap(aa.mp[x+movex[i]][y+movey[i]],aa.mp[x][y]);
IDa_star(aim_deep,now_deep+1,aa);
swap(aa.mp[x+movex[i]][y+movey[i]],aa.mp[x][y]);
}
}
MP aa ;
signed main(){
scanf("%lld",&t);
while(t--){
for(int i=1;i<=5;i++){
for(int j=1;j<=6;j++){
int c ;
c=getchar();
if(c=='0'){
aa.mp[i][j]=1;
}else{
if(c=='1'){
aa.mp[i][j]=2;
}else{
if(c=='*'){
aa.mp[i][j]=3;
}
}
}
}
}
ans =16;
for(int i=1;i<=15;i++){
IDa_star(i,1,aa);
if(ans!=16){
printf("%lld\n",&ans);
return 0;
}
}
}
}
感谢aker!好人一生平安