#include<iostream> int hang,lie; int data[20][20]; int dx[4]={-1,0,1,0}; int dy[4]={0,1,0,-1}; int sx,sy,ex,ey; int flag; int min=20; void dfs(int x,int y,int step) { if(step>=10) return; for(int i=0;i<4;i++) { int nx=x+dx[i]; int ny=y+dy[i]; if(/*nx>=0&&nx<hang&&ny>=0&&ny<lie&&*/data[nx][ny]==1) continue; while(!data[nx][ny]/*==0&&data[nx][ny]==2*/) { nx+=dx[i]; ny+=dy[i]; } if(nx>=0&&nx<hang&&ny>=0&&ny<lie) { if(data[nx][ny]==1) { data[nx][ny]=0; dfs(nx-dx[i],ny-dy[i],step+1); data[nx][ny]=1; } } if(data[nx][ny]==3) { if(min>step+1) min=step+1; continue; } } } int main() { freopen("input.txt","r",stdin); while(scanf("%d%d",&lie,&hang)!=EOF) { min=20; for(int i=0;i<20;i++) for(int j=0;j<20;j++) data[i][j]=-1; if(hang==0&&lie==0) break; for(int i=0;i<hang;i++) for(int j=0;j<lie;j++) scanf("%d",&data[i][j]); for(int i=0;i<hang;i++) { for(int j=0;j<lie;j++) { if(data[i][j]==2) {sx=i; sy=j; } } } dfs(sx,sy,0); if(min==20) { printf("%d\n",-1);} else { printf("%d\n",min); } } }