#include #include using namespace std; const int space = 0; const int barrier = 1; const int start = 2; const int goal = 3; int width, height; int table[21][21]; int ans; void rec(const int &x, const int &y, const int &count) { if(ans == INT_MAX && ans <= count) return; if(count > 10) return; int dx[] = {1, -1, 0, 0}; int dy[] = {0, 0, 1, -1}; for(int i=0; i<4; i++) { int xx = x+dx[i]; int yy = y+dy[i]; bool frag = false; if(table[xx][yy] == barrier) continue; for(; ; xx+=dx[i], yy+=dy[i]) { if(xx < 0 || yy < 0 || xx >= width || yy >= height) break; switch(table[xx][yy]) { case space: break; case goal: if(ans > count) ans = count; return; case barrier: table[xx][yy] = space; rec(xx-dx[i], yy-dy[i], count+1); table[xx][yy] = barrier; frag = true; break; } if(frag) break; } } } int main() { while(cin >> width >> height && (width||height)) { int sx, sy; ans = INT_MAX; fill(&table[0][0], &table[20][20], 0); for(int i=0; i> table[j][i]; if(table[j][i] == start) { sx = j; sy = i; table[j][i] = space; } } } rec(sx, sy, 1); if(ans == INT_MAX) { cout << -1 << endl; } else { cout << ans << endl; } } return 0; }