#include void battle(int x, int y) { int cnt = 1; int pole[1100][1100]; int i, j; int znak; int stav = 0; for (i = 0; i < x; i++) { for (j = 0; j < y; j++) { int nahore = 0, vlevo = 0, nl = 0, np = 0; znak = getchar(); if (stav < 0) continue; if (i > 0 && pole[i-1][j] != 0) nahore = 1; if (j > 0 && pole[i][j-1] != 0) vlevo = 1; if (i > 0 && j > 0 && pole[i-1][j-1] != 0) nl = 1; if (i > 0 && j < y-1 && pole[i-1][j+1] != 0) np = 1; switch (znak) { case '#': if (nahore && !vlevo) pole[i][j] = pole[i-1][j]; if (vlevo && !nahore) pole[i][j] = pole[i][j-1]; if (vlevo && nahore) { if (nl) pole[i][j] = pole[i-1][j]; else { printf("Bad placement.\n"); stav = -1; continue; } } if (np && !nahore) { printf("Bad placement.\n"); stav = -1; continue; } if (nl && !nahore) { printf("Bad placement.\n"); stav = -1; continue; } if (nahore && nl && !vlevo) { printf("Bad placement.\n"); stav = -1; continue; } if (!vlevo && !nahore && !nl && !np) { pole[i][j] = cnt; cnt++; } break; case '.': pole[i][j] = 0; if (nahore && vlevo) { printf("Bad placement.\n"); stav = -1; continue; } break; } } getchar(); } if (stav >= 0) { printf("There are %d ships.\n", cnt-1); } } int main(void) { int x, y; while (1) { scanf("%d %d\n", &x, &y); if (x == 0 && y == 0) break; battle(x, y); } return(0); }