#include<bits/stdc++.h>
using namespace std;
char g[1010][1010];
int n,m;
int ans=0;
bool f[1010][1010];
int fx[4]={1,0,-1,0},fy[4]={0,1,0,-1};
struct node{
int x,y;
};
queue<node>q;
void bfs(int m1,int n1){
q.push({m1,n1});
f[m1][n1]=true;
while(!q.empty()){
node t=q.front();
q.pop();
for(int i=0;i<4;i++){
int a=t.x+fx[i],b=t.y+fy[i];
if(a<0||a==n||b<0||b==m)continue;
if(g[a][b]=='.')continue;
if(f[a][b])continue;
q.push({a, b});
f[a][b]=true;
}
}
ans++;
}
int main()
{
memset(f, false, sizeof f);
cin>>n>>m;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>g[i][j];
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(g[i][j]=='#'){
if((g[i][j-1]=='#'&&(g[i+1][j-1]=='#'||g[i-1][j-1]=='#'))||(g[i][j+1]=='#'&&(g[i+1][j+1]=='#'||g[i-1][j+1]=='#'))){
cout<<"Bad placement.";
return 0;
}
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(g[i][j]=='.')continue;
else if(g[i][j]=='#'&&!f[i][j])bfs(i,j);
}
}
cout<<"There are "<<ans<<" ships.";
}