#include #include using namespace std; char t[128][128]; int rows, cols; int sr, sc; bool vis[128][128][16]; bool level[128][128][16]; void find_start() { for (int i=0; i qr; queue qc; queue qk; queue ql; for (int i=0; i=rows) continue; if (c<0 || c>=cols) continue; if (t[r][c]=='#') continue; // printf(">%d %d %d %c\n", r, c, k, t[r][c]); if (t[r][c]=='X') return pl+1; if (t[r][c]=='b') k |= 1; if (t[r][c]=='y') k |= 2; if (t[r][c]=='r') k |= 4; if (t[r][c]=='g') k |= 8; if (t[r][c]=='B' && (k&1)==0) continue; if (t[r][c]=='Y' && (k&2)==0) continue; if (t[r][c]=='R' && (k&4)==0) continue; if (t[r][c]=='G' && (k&8)==0) continue; if (vis[r][c][k]) continue; vis[r][c][k] = true; qr.push(r); qc.push(c); qk.push(k); ql.push(pl+1); } } return -1; } int main() { while (scanf("%d%d", &rows, &cols), rows+cols>0) { for (int i=0; i