#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iomanip>
#include<algorithm>
#include<limits.h>
using namespace std;
char boats[1005][1005];
int n,m;
int ans=0;
char by;
int highest=10000,lowest=0;
int leftest=10000,rightest=0;
void dfs(int starti,int startj){
boats[starti][startj]=='@';
lowest=starti>lowest?starti:lowest;
highest=starti<highest?starti:highest;
leftest=startj<leftest?startj:leftest;
rightest=startj>leftest?startj:rightest;
if((starti-1)>0 && boats[starti-1][startj]=='#')
dfs(starti-1,startj);
if((startj-1)>0 && boats[starti][startj-1]=='#')
dfs(starti,startj-1);
if(starti+1<=n && boats[starti+1][startj]=='#')
dfs(starti+1,startj);
if(startj+1<=m && boats[starti][startj+1]=='#')
dfs(starti,startj+1);
return;
}
bool check_boat(int highest,int lowest,int leftest,int rightest){
for(int i=highest;i<=lowest;++i){
for(int j=leftest;j<=rightest;++j){
if(boats[i][j]!='@')return false;
}
}
return true;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
cin>>by;
boats[i][j]=by;
}
}
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
if(boats[i][j]=='#'){
dfs(i,j);
ans++;
if(!check_boat(highest,lowest,leftest,rightest)){
cout<<"Bad placement.";
return 0;
}
highest=10000;
lowest=0;
leftest=10000;
rightest=0;
}
}
}
printf("There are %d ships.",ans);
return 0;
}