#include #include #define N 550 char g[N][N]; int h,w; int s[N*N]; struct { int i,j; } q[N*N],b[N*N]; int qp; int sp; int bp; #define debug() ; /*void debug () { int i,j; printf ("%d %d\n", s[sp], sp); for (i=0;i 0 && g[ii-1][jj] == 'X') { q[qp].i=ii-1; q[qp].j=jj; qp++; g[ii-1][jj]='*'; } if (jj > 0 && g[ii][jj-1] == 'X') { q[qp].i=ii; q[qp].j=jj-1; qp++; g[ii][jj-1]='*'; } if (ii < h-1 && g[ii+1][jj] == 'X') { q[qp].i=ii+1; q[qp].j=jj; qp++; g[ii+1][jj]='*'; } if (jj < w-1 && g[ii][jj+1] == 'X') { q[qp].i=ii; q[qp].j=jj+1; qp++; g[ii][jj+1]='*'; } } } void search1(int i,int j) { int ii,jj; s[sp]=0; bp=0; b[bp].i=i; b[bp].j=j; bp++; while (bp--) { debug(); ii=b[bp].i; jj=b[bp].j; if (g[ii][jj]=='X') { g[ii][jj]='*'; search2(ii,jj); debug(); } if (ii > 0 && g[ii-1][jj] == 'X') { g[ii-1][jj]='*'; search2(ii-1,jj); } if (ii > 0 && g[ii-1][jj] == '*') { b[bp].i=ii-1; b[bp].j=jj; bp++; g[ii-1][jj]='.'; } if (jj > 0 && g[ii][jj-1] == 'X') { g[ii][jj-1]='*'; search2(ii,jj-1); } if (jj > 0 && g[ii][jj-1] == '*') { b[bp].i=ii; b[bp].j=jj-1; bp++; g[ii][jj-1]='.'; } if (ii < h-1 && g[ii+1][jj] == 'X') { g[ii+1][jj]='*'; search2(ii+1,jj); } if (ii < h-1 && g[ii+1][jj] == '*') { b[bp].i=ii+1; b[bp].j=jj; bp++; g[ii+1][jj]='.'; } if (jj < w-1 && g[ii][jj+1] == 'X') { g[ii][jj+1]='*'; search2(ii,jj+1); } if (jj < w-1 && g[ii][jj+1] == '*') { b[bp].i=ii; b[bp].j=jj+1; bp++; g[ii][jj+1]='.'; } } sp++; } int main() { int i,j; char l[200]; while(1) { gets (l); sscanf(l, "%d%d",&h,&w); sp=0; if (h==0 && w==0) break; for (i=0;i