#include #include #include #include #include #include #define D 1 #if D #define _V(_vna, _prf) printf("%s: %"#_prf" (L %d)\n", #_vna, _vna, __LINE__) #else #define _V(_, __) #endif char c[55][55]; int gx, gy; int rek(int x, int y, int xflag) { int res = 0; if (x < 0 || y < 0 || x >= gx || y >= gy) return 0; if (c[x][y] == '.') return 0; if (c[x][y] == '*' && xflag) return 0; if (xflag) { c[x][y] = '*'; rek(x-1,y,1); rek(x+1,y,1); rek(x,y-1,1); rek(x,y+1,1); } else { if (c[x][y] == 'X') { rek(x,y,1); res++; } c[x][y] = '.'; res+=rek(x-1,y,0); res+=rek(x+1,y,0); res+=rek(x,y-1,0); res+=rek(x,y+1,0); } return res; } int wz[7]; int main(C) { int i, j, x, y, le; FILE *f=fopen("dice.in","r"); while(fscanf(f,"%d%d", &gx, &gy),gx||gy) { for (y = 0; y < gy; y++) for (x = 0; x < gx; x++) fscanf(f, " %c", &c[x][y]); for (i = 0; i <= 6; i++) wz[i] = 0; for (y = 0; y < gy; y++) for (x = 0; x < gx; x++) wz[rek(x, y, 0)]++; printf("Throw %d\n", C++); le = 0; for (i = 1; i <= 6; i++) for (j = 0; j < wz[i]; j++) { if (le) printf(" "); printf("%d", i); le = 1; } printf("\n\n"); } return 0; }