#include #include #include #include #define MAX 20 using namespace std; int w, h; int tbl[MAX][MAX]; int p, q, a, b; int move[] = {-1,0,1,0,0,-1,0,1}; int result; void solve(int index, int aa, int bb) { if(index == 11) { return; } for(int i = 0 ; i < 4 ; i++) { int ii = aa, jj = bb; if(tbl[ii + move[i * 2]][jj + move[i * 2 + 1]] == 1) continue; while(true) { if(ii < 0 || ii >= h || jj < 0 || jj >= w) { break; } else if(tbl[ii][jj] == 3) { result = min(result, index); break; } else if(tbl[ii][jj] == 1) { tbl[ii][jj] = 0; ii -= move[i * 2]; jj -= move[i * 2 + 1]; solve(index + 1, ii, jj); tbl[ii + move[i * 2]][jj + move[i * 2 + 1]] = 1; break; } ii = ii + move[i * 2]; jj = jj + move[i * 2 + 1]; } } } int main() { while(cin >> w >> h, w || h) { for(int i = 0 ; i < h ; i++) { for(int j = 0 ; j < w ; j++) { cin >> tbl[i][j]; if(tbl[i][j] == 2) { p = i; q = j; } else if(tbl[i][j] == 3) { a = i; b = j; } } } solve(1, p, q); if(result == 20) cout << -1 << endl; else cout << result << endl; } }