#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=1005;
struct node
{
int x,y;
};
int vis[maxn][maxn];
char a[maxn][maxn];
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
int n;
int ans=0;
bool check(int ax,int ay)
{
if(ax<1)
{
return true;
}
if(ax>n)
{
return true;
}
if(ay<1)
{
return true;
}
if(ay>n)
{
return true;
}
if(vis[ax][ay]==true)
{
return true;
}
if(a[ax][ay]=='.')
{
return true;
}
return false;
}
void bfs(int posx,int posy)
{
queue<node>q;
vis[posx][posy]=true;
q.push({posx,posy});
int y=0;
int cnt=0;
while(q.empty()==false)
{
node t=q.front();
q.pop();
cnt++;
int flag=0;
for(int i=0;i<4;i++)
{
int nx=dx[i]+t.x;
int ny=dy[i]+t.y;
if(a[nx][ny]=='.')
{
flag++;
}
if(check(nx,ny))
{
continue;
}
vis[nx][ny]=true;
q.push({nx,ny});
}
if(flag>0) y++;
}
if(cnt==y) ans++;
return ;
}
signed main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(a[i][j]=='#'&&vis[i][j]==false)
{
ans++;
bfs(i,j);
}
}
}
cout<<ans;
return 0;
}