#include<iostream>
#include<cstdio>
using namespace std;
int m, n;
char map[1001][1001];
int sum = 0;
void dfs(int x, int y)
{
map[x][y] = '.';
int xt,yt;
int move[4][2] = { {0,1}, {1,0} ,{0,-1}, {-1,0} };
for(int i=0;i<=3;i++)
{
xt = x + move[i][0];
yt = y + move[i][1];
if (xt < 1 || yt < 1||xt>m||yt>n)continue;
if (map[xt][yt] == '#') { map[xt][yt] = '.';
dfs(xt, yt);
}
}
return;
}
bool jud(int x, int y)//判断是否是方形的水满法,关键一步是判断是否有拐角结构,即四个格子里有三个#
{
int s=0;
for (int i = 0; i <= 1; i++)
for (int j = 0; j <= 1; j++)
if (map[x + i][y + j] == '#')
s++;
if (s == 3)return false;
else return true;
}
int main()
{
cin >> m >> n;
for (int i = 1; i <= m; i++)
for (int j = 1; j <= n; j++)
cin >> map[i][j];
for (int i = 1; i <= m; i++)
for (int j = 1; j <= n; j++)
{
if (!jud(i, j)) {
cout << "Bad placement.";
return 0;
}
}
for (int i = 1; i <= m; i++)
for (int j = 1; j <= n; j++)
if (map[i][j] == '#')
{
dfs(i, j);
++sum;
}
printf("There are %d ships.", sum);
return 0;
}