//求一个地图中岛屿的个数
#include<iostream>
using namespace std;
const int N=1e3+9;
char mp[N][N];
int visit[N][N],color[N][N];
bool vis[N*N];
int scc=0;
int n;
//上下左右
int dx[]={0,0,-1,1};
int dy[]={1,-1,0,0};
bool inmp(int x,int y){
if(x>=1&&x<=n&&y<=n&&y>=1) return true;
else return false;
}
//实现从坐标(x,y)开始的深度搜索,要是(x,y)这个点可以驻足,那么就在这个地方标记一下,
//同时以这个点为根据点 ,往其他方向深度搜索,要是不可以驻足,那么就没有必要去标记,
//或者标记一下这个点不能去
void dfs(int x,int y){
if(!visit[x][y]&&mp[x][y]=='#'&&inmp(x,y)) {
visit[x][y]=1;
color[x][y]=scc;
for(int i=0;i<4;++i){
int nx=x+dx[i];
int ny=y+dy[i];
dfs(nx,ny);
//那个为什么不用回溯
}
}
}
int main(void){
cin>>n;
//输入地图
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
cin>>mp[i][j];
}
}
//开始遍历
for(int i=1;i<=n;++i){
for(int j=1;j<=n;++j){
//没有被染色同时还是一个岛屿
if(mp[i][j]=='#'&&color[i][j]==0){
scc++;
dfs(i,j);
}
}
}
cout<<scc;
return 0;
}