#include #include #include #include #include #include //#define TEST typedef vector::iterator VI; char pic[52][52]; vector res; void init() { for (int i=0; i < 52; i++) for (int j=0; j < 52; j++) pic[i][j]='.'; } void dfs(int hi, int wi) { if (pic[hi][wi]!='X') return; pic[hi][wi]='*'; dfs(hi+1,wi); dfs(hi,wi+1); dfs(hi-1,wi); dfs(hi,wi-1); } int get_all_from(int hi,int wi) { int dotc=0; while(1) { int min=INT_MAX; for(;pic[hi][wi]!='.';wi++) { if (pic[hi][wi]=='X') { dfs(hi,wi); dotc++; } //else if (pic[hi][wi]=='*') pic[hi][wi]='.'; if (pic[hi+1][wi]=='X'||pic[hi+1][wi]=='*') if (wi < min) min = wi; } if (min == INT_MAX){ return dotc; } hi++; wi=min; while(pic[hi][wi-1]!='.') wi--; } } int main() { #ifndef TEST ifstream fin("dice.in"); cin = fin; #endif for (int cnt=1; 1; cnt++) { init(); // Input int w, h; cin >> w >> h; if (w==0 && h==0) break; for (int hi = 1; hi <= h; hi++) for (int wi = 1; wi <= w; wi++) { char c; cin >> c; pic[hi][wi] = c; } //Processing // --- For all Pixels: for (int hi=1; hi<=h; hi++) for (int wi=1; wi<=w;wi++) if (pic[hi][wi]=='*'||pic[hi][wi]=='X') { // Neuer Wuerfel int dots = get_all_from(hi,wi); res.push_back(dots); } // Output: sort(res.begin(),res.end()); cout << "Throw "<