#include <stdio.h>
#define xx 1
#define yy 2
#define HP 3
#define time 4
int main (void)
{
int move_x[4]={1,-1,0,0};
int move_y[4]={0,0,1,-1};
int head=0,tail=2;
int memory[1001][10]={0};
int n,m;
int mark[10][10]={0};
scanf ("%d %d",&n,&m);
int map[10][10]={0};
for (int i=1;i<=n;i++)
{
for (int y=1;y<=m;y++)
{
scanf ("%d",&map[i][y]);
if (map[i][y]==2)
{
memory[1][xx]=i;
memory[1][yy]=y;
mark[i][y]=1;
}else if (map[i][y]==3)
{
mark[i][y]=1;
}
}
}
int x_now,y_now,home=0;
int timetohome=10000;
while(head<tail)
{
head++;
printf ("%d %d\n",memory[head][xx],memory[head][yy]);
for (int i=0;i<4;i++)
{
x_now=memory[head][xx]+move_x[i];
y_now=memory[head][yy]+move_y[i];
if (map[x_now][y_now]==3&&memory[tail][HP]<6)
{
timetohome=memory[tail][time]<timetohome?
memory[tail][time]:timetohome;
home=1;
}
if (mark[x_now][y_now]!=1&&x_now>=1&&x_now<=n&&
y_now>=1&&y_now<=m&&map[x_now][y_now]!=0)
{
memory[tail][HP]=memory[head][HP]+1;memory[tail][time]=memory[head][time]+1;
memory[tail][xx]=x_now,memory[tail][yy]=y_now;
mark[x_now][y_now]=1;
if(map[x_now][y_now]==4)
memory[tail][HP]--;
tail++;
}
}
}
if (home==1)
printf ("%d",timetohome);
else printf ("-1");
return 0;
}