package main
import (
"bufio"
"fmt"
"os"
)
func main() {
var n int
fmt.Scanf("%d", &n)
var k = make([][]byte, n)
var visit = make([][]bool, n)
scanner := bufio.NewScanner(os.Stdin)
for i:=0;i<n;i++{
k[i]= make([]byte, n)
visit[i]=make([]bool,n)
scanner.Scan() // 读取一整行
line := scanner.Text()
for j:=0;j<n;j++{
k[i][j] = line[j] // 直接fmt.Scanf("%c", &k[i][j])需注意避开行末的换行符
}
}
var result int =0
var submerge bool
dist := [][]int{{0,1},{0,-1},{1,0},{-1,0}}
var dfs func(i, j int)
dfs = func(i, j int){ // 遍历过程中如果不存在四边都是空地的,该区域会被淹没
if submerge {
var f1,f2,f3,f4 bool = true, true, true, true
if i-1 >=0 {
if k[i-1][j] !='#'{
f1 = false
}
}
if i+1 <n {
if k[i+1][j] !='#'{
f2 = false
}
}
if j-1 >=0 {
if k[i][j-1] !='#'{
f3 = false
}
}
if j+1 <n {
if k[i][j+1] !='#'{
f4 = false
}
}
if f1 && f2 && f3 && f4 {
submerge = false
}
}
for _,v:=range dist{
ni := i+v[0]
nj := j+v[1]
if ni<0|| ni>=n||nj<0||nj>=n || visit[ni][nj] || k[ni][nj] == '.'{
continue
}
visit[ni][nj] = true
dfs(ni,nj)
}
}
for i:=0;i<n;i++{
for j:=0;j<n;j++{
if visit[i][j] == false && k[i][j]=='#' {
submerge = true // 先假设该联通分量区域会被全部淹没
visit[i][j] =true
dfs(i,j)
if submerge {
result++
}
}
}
}
fmt.Println(result)
}