java
import java.util.Deque;
import java.util.LinkedList;
import java.util.Scanner;
public class Main{
static int n;
static final int N = 1010;
static char[][] g = new char[N][N];
static boolean[][] st = new boolean[N][N];
public static boolean bfs(int sx,int sy) {
Deque<int[]> dq = new LinkedList<>();
dq.addLast(new int[] {sx,sy});
st[sx][sy] = true;
int total = 0,bound = 0;
int[] dx = {1,-1,0,0};
int[] dy = {0,0,1,-1};
while(!dq.isEmpty()) {
int[] t = dq.pollFirst();
total++;
boolean is_bound = false;
for(int i=0;i<4;i++) {
int x = t[0]+dx[i],y = t[1]+dy[i];
if(x < 0 ||x > (n-1) || y < 0 || y > (n-1))
continue;
if(st[x][y])
continue;
if(g[x][y] == '.') {
is_bound = true;
continue;
}
dq.addLast(new int[] {x,y});
st[x][y] = true;
}
if(is_bound) bound++;
}
return total == bound;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
for(int i = 0;i < n;i++)
{
char[] charArray = sc.next().toCharArray();
for(int j = 0;j < n;j++)
{
g[i][j] = charArray[j];
}
}
int cnt = 0;
for(int i = 0;i < n;i++)
{
for(int j = 0;j < n;j++)
{
if(!st[i][j] && g[i][j] == '#')
{
if(bfs(i,j)) cnt ++;
}
}
}
System.out.println(cnt);
}
}