#include #include #include #include #include #include #include #include #include #include #include using namespace std; int D[100][100]; int w, h; int sx, sy; int ex, ey; #define ISIN(X,Y) (0 <= (X) && (X) < w && 0 <= (Y) && (Y) < h) int solve( int x, int y, int d, int dm ){ if( d >= dm ) return -1; if( x == ex && y == ey ) return d; int re = -1; for( int dir = 0; dir < 4; dir ++ ){ int dx, dy; int xx = x, yy = y; if( dir == 0 ){ dx = 0; dy = 1; } if( dir == 1 ){ dx = 0; dy = -1; } if( dir == 2 ){ dx = 1; dy = 0; } if( dir == 3 ){ dx = -1; dy = 0; } if( !ISIN(xx+dx,yy+dy) || D[xx+dx][yy+dy] != 0 ) continue; while( ISIN(xx+dx,yy+dy) && D[xx+dx][yy+dy] == 0 ){ xx += dx; yy += dy; if( xx == ex && yy == ey ) return d + 1; } if( !ISIN(xx+dx,yy+dy) ) continue; D[xx+dx][yy+dy] = 0; int t = solve( xx, yy, d + 1, dm ); if( t >= 0 && (re < 0 || t < re) ) re = t; D[xx+dx][yy+dy] = 1; } return re; } int main(void) { while(1){ scanf( "%d%d", &w, &h ); if( w == 0 && h == 0 ) break; ex = ey = -1; sx = sy = -1; for( int y = 0; y < h; y ++ ){ for( int x = 0; x < w; x ++ ){ int i; scanf( "%d", &i ); if( i == 2 ){ sx = x; sy = y; i = 0; } if( i == 3 ){ ex = x; ey = y; i = 0; } D[x][y] = i; } } if( ex < 0 || sx < 0 ) printf("-1\n"); else printf( "%d\n", solve( sx, sy, 0, 10 ) ); } return 0; }