#include #include typedef std::list intList; int i, j, w, h, ships; bool ok; char pole[502][502]; int pole2[502][502]; intList vysledky; int count; void delX(int i, int j) { pole[i][j]='*'; if (pole[i+1][j]=='X') delX(i+1, j); if (pole[i][j+1]=='X') delX(i, j+1); if (pole[i-1][j]=='X') delX(i-1, j); if (pole[i][j-1]=='X') delX(i, j-1); } void delStar(int i, int j) { pole[i][j]='.'; count += pole2[i][j]; if (pole[i+1][j]=='*') delStar(i+1, j); if (pole[i][j+1]=='*') delStar(i, j+1); if (pole[i-1][j]=='*') delStar(i-1, j); if (pole[i][j-1]=='*') delStar(i, j-1); } int main() { scanf("%d %d\n", &h, &w); for (i=0; i<=501; i++) { pole[0][i]='.'; pole[i][0]='.'; } while ( (w!=0) && (h!=0) ) { vysledky.clear(); for (i=1; i<=h; i++) { scanf("%s\n", &pole[i][1]); pole[i][w+1]='.'; } for (i=0; i<=501; i++) pole[h+1][i]='.'; for (i=1; i<=h; i++) for (j=1; j<=w; j++) if (pole[i][j]=='X') { pole2[i][j]=1; delX(i,j); } else pole2[i][j]=0; for (i=1; i<=h; i++) for (j=1; j<=w; j++) if (pole[i][j]=='*') { count = 0; delStar(i,j); vysledky.insert(vysledky.end(), count); } vysledky.sort(); printf("Throw:"); intList::iterator i; for(i = vysledky.begin(); i != vysledky.end(); i++) printf(" %d", (int)(*i)); printf("\n"); scanf("%d %d\n", &h, &w); } return 0; }