#include<bits/stdc++.h>
using namespace std;
inline int read(){
int ret=0,f=1;char ch=getchar();
while (ch<'0'ch>'9') {if (ch=='-') f=-f;ch=getchar();}
while (ch>='0'&&ch<='9') ret=ret*10+ch-'0',ch=getchar();
return ret*f;
}//丑陋的读优
void write(int x){
if(x<0){
putchar('-');
write(-x);
return ;
}
if(x<10) putchar(x+'0');
else{
write(x/10);
putchar(x%10+'0');
}
}//丑陋的输优
int n,m,a[1010][1010],sum[1010][1010];
int vis[1010][1010],ans;
void dfs(int x,int y){
if(vis[x][y]==1) return ;
vis[x][y]=1;
if(a[x][y+1]==1) dfs(x,y+1);
if(a[x-1][y]==1) dfs(x-1,y);
if(a[x+1][y]==1) dfs(x+1,y);
if(a[x][y-1]==1) dfs(x,y-1);
}//丑陋的dfs
int main(){
n=read();m=read();
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char ch;cin>>ch;
if(ch=='#') a[i][j]=1;
}
}//读入
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];
}
}//前缀和
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]==1){
int k=1;
while(a[i+k][j+k]==1) k++;
--k;
int hh=sum[i+k][j+k]-sum[i-1][j]-sum[i][j-1]+sum[i-1][j-1];
++k;
if(hh<k*k){
puts("Bad placement.");
return 0;
}
k=1;
while(a[i+k][j-k]==1) ++k;
--k;
hh=sum[i+k][j]-sum[i-1][j]-sum[i+k][j-k-1]+sum[i-1][j-k-1];
++k;
if(hh<k*k){
puts("Bad placement.");
return 0;
}
}//不想再提了。。。判断船只是否接触
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i][j]==1&&vis[i][j]==0){
++ans;
dfs(i,j);
}//dfs统计答案
}
}
cout<<"There are ";
write(ans);
cout<<" ships.";putchar('\n');//输出
return 0;//结束。。。。
}
/*************************
用时: 102ms / 内存: 5152KB
代码:1.63KB C++
By yuzhengxi
**************************/