#include using namespace std; #define NONE 0 #define OBJ 1 #define START 2 #define GOAL 3 #define DEAD 4 int board[22][22]; int sx,sy; int gx,gy; int wx[] = {0,0,1,-1}; int wy[] = {1,-1,0,0}; int calc(int x,int y,int depth){ if(depth == 11) return -1; int dx,dy; int score = -1; for(int i=0;i<4;i++){ dx = wx[i]; dy = wy[i]; if(board[y+dy][x+dx] == OBJ) continue; int cx = x; int cy = y; bool you_die = false; while(true){ cx = cx + dx; cy = cy + dy; if(board[cy][cx] == DEAD){ you_die = true; break; } if(cy == gy && cx == gx) return depth; if(board[cy+dy][cx+dx] == OBJ) break; } if(you_die) continue; int ox,oy; ox = cx + dx; oy = cy + dy; board[oy][ox] = NONE; int result = calc(cx,cy,depth+1); board[oy][ox] = OBJ; if(result == -1){ continue; }else if(score == -1){ score = result; }else{ score = min(score,result); } } return score; } int main(void){ while(true){ int w,h; cin >> w >> h; if(w == 0 && h == 0) break; for(int y=0;y> t; if(t == GOAL){ gx = x; gy = y; t = NONE; }else if(t == START){ sx = x; sy = y; t = NONE; } board[y][x] = t; } } int ans = calc(sx,sy,1); cout << ans<