#include #include using namespace std; char mapa[105][105]; int best[105][105][1<<4]; bool was[105][105][1<<4]; int dx[]={1,-1,0,0}; int dy[]={0,0,1,-1}; priority_queue que; int r,c; void add(int x, int y, int co, int len){ int mco=co; if (x<0||y<0||x>=r||y>=c)return; if (mapa[x][y]=='b')mco |= 1; if (mapa[x][y]=='r')mco |= 2; if (mapa[x][y]=='y')mco |= 4; if (mapa[x][y]=='g')mco |= 8; if (mapa[x][y]=='B' && !(co&1))return; if (mapa[x][y]=='R' && !(co&2))return; if (mapa[x][y]=='Y' && !(co&4))return; if (mapa[x][y]=='G' && !(co&8))return; if (mapa[x][y]=='#')return; if (!was[x][y][mco] || best[x][y][mco] > len){ best[x][y][mco]=len; was[x][y][mco]=1; que.push(-(mco+16*x+16*100*y + 16*100*100LL*len)); } } int main () { for(;;){ long long len; scanf("%d%d", &r, &c); if (r+c==0)break; memset(best, 0, sizeof(best)); memset(was, 0, sizeof(was)); for(int i=0; i