#include<iostream>
#include<cmath>
using namespace std;
int map[10][10],vis[10][10];
int nex[4][2]={{1,0},{0,1},{0,-1},{-1,0}};
int n,m;
int sx,sy,nx,ny;
int hp=6,step=0;
long long minn=20002000;
int flag=0;
int DFS(int x,int y){
if(step<minn){
if(map[x][y]==4){
hp=6;
}
if(map[x][y]==3){
flag=1;
if(step<minn){
minn=step;
step=0;
}
}
vis[x][y]=1;
for(int i=0;i<4;i++){
nx=x+nex[i][0];
ny=y+nex[i][1];
if(nx>=0&&ny>=0&&nx<n&&ny<m&&map[nx][ny]&&!vis[nx][ny]){
step++;
hp--;
if(hp!=0){
DFS(nx,ny);
}
step--;
hp++;
vis[nx][ny]=0;
}
}
}
}
int main(){
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>map[i][j];
if(map[i][j]==2){
sx=i;
sy=j;
}
}
}
DFS(sx,sy);
if(flag){
cout<<minn;
}else{
cout<<"-1";
}
return 0;
}
谢谢各位DL