#include #include #include using namespace std; const int inf = 12345678; int R, C; int memo[110][110][17]; char mapa[110][110]; int getbest( int r, int c, int k ) { if ( mapa[r][c] == 'X' ) return 0; if ( mapa[r][c] == '#' ) return inf; if ( memo[r][c][k] != 0 ) return memo[r][c][k]-1; memo[r][c][k] = inf; int ret = inf; switch ( mapa[r][c] ) { case 'b': k |= 1; break; case 'y': k |= 2; break; case 'r': k |= 4; break; case 'g': k |= 8; break; case 'B': if ( (k&1)==0 ) return inf; break; case 'Y': if ( (k&2)==0 ) return inf; break; case 'R': if ( (k&4)==0 ) return inf; break; case 'G': if ( (k&8)==0 ) return inf; break; } ret = min( ret, getbest(r-1,c,k)+1 ); ret = min( ret, getbest(r+1,c,k)+1 ); ret = min( ret, getbest(r,c-1,k)+1 ); ret = min( ret, getbest(r,c+1,k)+1 ); memo[r][c][k] = ret+1; return ret; } int main() { while ( scanf( "%d %d", &R, &C ), R+C != 0 ) { memset( mapa, '#', sizeof mapa ); memset( memo, 0, sizeof memo ); for ( int r = 1; r <= R; ++r ) scanf( "%s", &mapa[r][1] ); int ret; for ( int r = 1; r <= R; ++r ) { for ( int c = 1; c <= C; ++c ) { if ( mapa[r][c] == '*' ) { ret = getbest(r,c,0); goto DONE; } } } DONE: if ( ret >= inf ) { puts( "The poor student is trapped!" ); } else { printf( "Escape possible in %d steps.\n", ret ); } } return 0; }