#include #include #include #include #include #define xDEBUG 1 static char F[1050][1050]; int main(void) { int i; int R,C; char *s; int ships; int x,y,xe,ye,xi,yi; #ifdef DEBUG int y2; #endif for (;;) { i=scanf("%d %d\n",&R,&C); assert(i==2); if (R==0 && C==0) break; for (y=1;y<=R;y++) { s=fgets(F[y]+1,sizeof(F[y])-2,stdin); assert(s); } memset(F[y+1],0,C+4); ships=0; for (y=1;y<=R;y++) { while ((s=strchr(F[y]+1,'#'))) { ships++; x=s-F[y]; for (xe=x;F[y][xe+1]=='#';xe++); for (ye=y;F[ye+1][x]=='#';ye++); for (i=x-1;i<=xe+1;i++) { if (F[y-1][i]=='#') goto bad; if (F[ye+1][i]=='#') goto bad; } for (i=y-1;i<=ye+1;i++) { if (F[i][x-1]=='#') goto bad; if (F[i][xe+1]=='#') goto bad; } for (yi=y;yi<=ye;yi++) for (xi=x;xi<=xe;xi++) { if (F[yi][xi]!='#') goto bad; F[yi][xi]='!'; } } } #ifdef DEBUG for (y2=1;y2<=R;y2++) { fputs(F[y2]+1,stdout); } #endif if (0) { bad: puts("Bad placement."); } else { printf("There are %d ships.\n",ships); } } return 0; }