#include<iostream> typedef struct node { int x; int y; }node; int sx,sy,ex,ey; node point[100000]; int data[50][50]; int hang,lie; int k; int dx[4]={-1,0,1,0}; int dy[4]={0,1,0,-1}; int min=-1; int flag=1; int a[50][50]; void bfs(int p) { int tou=0; int wei=1; point[tou].x=sx; point[tou].y=sy; data[sx][sy]=4; while(tou<wei) { if(point[tou].x==ex&&point[tou].y==ey) { flag=0; min=p; break; } for(int i=0;i<4;i++) { int q=i; if(i==0||i==2) { int nx=point[tou].x; int ny=point[tou].y; for(int i=0;i<=p;i++) { nx=nx+dx[q]; ny=ny+dy[q]; if(nx>=0&&nx<hang&&ny>=0&&ny<lie&&data[nx][ny]!=4&&data[nx][ny]!=0) { data[nx][ny]=4; point[wei].x=nx; point[wei].y=ny; wei++; break; } } } if(i==1||i==3) { int nx=point[tou].x+dx[i]; int ny=point[tou].y+dy[i]; if(nx>=0&&nx<hang&&ny>=0&&ny<lie&&data[nx][ny]!=4&&data[nx][ny]!=0) { data[nx][ny]=4; point[wei].x=nx; point[wei].y=ny; wei++; } } } tou++; } } int main() { freopen("input.txt","r",stdin); scanf("%d",&k); while(k--) { flag=1; scanf("%d",&hang); scanf("%d",&lie); for(int i=0;i<hang;i++) { for(int j=0;j<lie;j++) {scanf("%d",&data[i][j]); //scanf("%d",&a[i][j]); if(data[i][j]==2) { data[i][j]=4; sx=i; sy=j; } if(data[i][j]==3) { ex=i; ey=j; } } } for(int i=0;i<hang;i++) for(int j=0;j<lie;j++) a[i][j]=data[i][j]; for(int i=0;i<hang;i++) {for(int j=0;j<lie;j++) printf("%d",data[i][j]); printf("\n");} printf("\n"); for(int i=0;i<lie;i++) { if(flag) { for(int l=0;l<hang;l++) for(int k=0;k<lie;k++) { data[l][k]=a[l][k]; } bfs(i); } } for(int i=0;i<hang;i++) {for(int j=0;j<lie;j++) printf("%d",data[i][j]); printf("\n");} printf("%d",min); } }