#include #include #define VELMIVELA 2000000 inline bool testkey(int &i, char &c) { c=tolower(c); switch (c) { case 'g' : return i/8!=0; case 'r' : return (i%8)/4!=0; case 'y' : return (i%4)/2!=0; case 'b' : return (i%2)!=0; default : return false; } } inline int addkey(int &code,char &key) { switch (key) { case 'g' : if (!testkey(code,key)) return code+8; break; case 'r' : if (!testkey(code,key)) return code+4; break; case 'y' : if (!testkey(code,key)) return code+2; break; case 'b' : if (!testkey(code,key)) return code+1; break; } return code; } int kroky[102][102][16]; char mapa[102][102]; int R,C; void chod(int x, int y, int kod, int krokov) { char c=mapa[x][y]; if (c=='B' || c=='Y' || c=='R' || c=='G') if (!testkey(kod,c)) return; if (c=='b' || c=='y' || c=='r' || c=='g') { kod=addkey(kod,c); } if (kroky[x][y][kod]>krokov) { kroky[x][y][kod]=krokov; krokov++; if (x+1=0 && mapa[x-1][y]!='#') chod(x-1,y,kod,krokov); if (y+1=0 && mapa[x][y-1]!='#') chod(x,y-1,kod,krokov); } } int main() { while (true) { int startx,starty; scanf("%d %d",&R,&C); if (R==0 && C==0) return 0; getchar(); for (int i=0;i