/*#include <stdio.h>
int arr[101][101];
int n;
int z[101][101]= { };
int cnt=0;
void dfs(int i,int j,int h)
{
if(i<0||i>=n||j<0||j>=n||arr[i][j]<=h)
return ;
arr[i][j]=-1;
dfs(i+1,j,h);
dfs(i-1,j,h);
dfs(i,j+1,h);
dfs(i,j-1,h);
}
int main()
{
int i,j;
int max=1;
scanf("%d",&n);
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
scanf("%d",&arr[i][j]);
}
}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
z[i][j]=arr[i][j];
}
}
for(int h=1; h<=100; h++)
{
cnt=0;
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(arr[i][j]>h)
{
cnt++;
dfs(i,j,h);
}
}
}
if(cnt>max)
{
max=cnt;
}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
arr[i][j]=z[i][j];
}
}
}
printf("%d",max);
return 0;
}
int arr[101][101];
void bfs(int i,int j)
{
}
int stack[100];
int top=-1;
void push(int data)
{
top++;
stack[top]=data;
}
int pop()
{
return stack[top--];
}
#include<stdio.h>
int queue[100]= {};
int front=-1,rear=-1;
int map[101][101]= { };
int visited[101]= { };
int node,edge;
void enq(int data)
{
visited[data]=1;
rear++;
queue[rear]=data;
}
int deq()
{
if(front==rear)
return 0;
front++;
return queue[front];
}
int main()
{
int i,j,x,y,cnt=0;
scanf("%d %d",&node,&edge);
for(i=1; i<=edge; i++)
{
scanf("%d %d",&x,&y);
map[x][y]=1;
map[y][x]=1;
}
enq(1);
while(rear!=front)
{
x=deq();
for(int i=1; i<=node; i++)
{
if(map[x][i]==1&&visited[i]==0)
{
enq(i);
}
}
}
for(i=1; i<=node; i++)
{
if(visited[i]==1)
{
cnt++;
}
}
printf("%d",cnt-1);
}*/
#include<stdio.h>
int arr[1001][1001];
int n;
void dfs(int i,int j)
{
if(i<0||i>=n||j<0||j>=n||arr[i][j]!=0)return;
arr[i][j]=1;
dfs(i+1,j);
dfs(i-1,j);
dfs(i,j+1);
dfs(i,j-1);
}
int main()
{
int i,j;
int n;
int cnt=0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&arr[i][j]);
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(arr[i][j]==0)
{
cnt++;
dfs(i,j);
}
}
}
printf("%d",cnt);
}



