#include int R,C; char data[2000][2000]; int invalid; int minX,minY,maxX,maxY; void dfs (int x,int y) { int i,j; data[x][y] = '1'; if (x< minX) minX = x; if (x> maxX) maxX = x; if (y < minY) minY = y; if (y > maxY) maxY = y; for (i = -1; i < 2; i++) for (j = -1; j < 2; j++) if (data[x+i][y+j] == '#') { if (i && j && (data[x+i][y] == '.') &&(data[x][y+j]=='.')) invalid = 1; dfs(x+i,y+j); } } int main () { int i,j; int ships; while (1) { scanf ("%d%d",&R,&C); if (!R && !C) return 0; for (i = 0; i < R; i++) scanf("%s",data[i+1] + 1); for (i = 0 ; i <=C; i++) data[0][i] = data[R+1][i] ='.'; for (i = 0; i <= R; i++) data[i][0] = data[i][C+1] = '.'; data[R+1][C+1] = '.'; ships = 0; invalid = 0; for (i = 1; i <=R;i++) for (j = 1; j <=C;j++) if (data[i][j] == '#') { int k,l; ships ++; minX=maxX=i; minY=maxY=j; dfs(i,j); for (k = minX; k <= maxX;k++) for(l = minY; l <=maxY; l++) if (data[k][l] != '1') invalid = 1; } if (!invalid) printf("There are %d ships.\n",ships); else printf("Bad placement.\n"); } }