#include <bits/stdc++.h>
using namespace std;
const int N=1e6;
int n,m,T;
int a[100][100];
int net[N],to[N],h[N],val[N],cnt=1;
void add(int u,int v,int w)
{
net[++cnt]=h[u];
h[u]=cnt;
to[cnt]=v;
val[cnt]=w;
}
int s,t;
int incf[N],vis[N],pre[N];
bool ek()
{
queue<int>Q;
memset(vis,0,sizeof vis);
Q.push(s);
incf[s]=1<<30;
vis[s]=1;
while(!Q.empty())
{
int u=Q.front();
Q.pop();
for(int i=h[u];i;i=net[i])
{
int v=to[i];
if(val[i]<=0)continue;
if(vis[v])continue;
vis[v]=1;
incf[v]=min(incf[u],val[i]);
pre[v]=i;
Q.push(v);
if(v==t)return true;
}
}
return false;
}
int sum=0;
void updata()
{
int v=t;
while(v!=s)
{
int k=pre[v];
val[k]-=incf[t];
val[k^1]+=incf[t];
v=to[k^1];
}
sum+=incf[t];
}
void mem()
{
cnt=1;
sum=0;
memset(h,0,sizeof h);
memset(net,0,sizeof net);
memset(to,0,sizeof to);
memset(val,0,sizeof val);
}
int b[8][2]={{-1,-2},{-2,-1},{1,-2},{2,-1},{-1,2},{-2,1},{1,2},{2,1}};
int main()
{
cin>>n;
s=0;
t=n*n+1;
int num=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
char x;
cin>>x;
if(x=='0')
a[i][j]=0;
else
a[i][j]=1;
if(a[i][j])
num++;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(a[i][j])continue;
if((i+j)&1)
{
add(s,(i-1)*n+j,1);
add((i-1)*n+j,s,0);
if(!a[i][j])
{
for(int k=0;k<8;k++)
{
int fx=i+b[k][0];
int fy=j+b[k][1];
if(fx>=1&&fx<=n&&fy>=1&&fy<=n)
{
add((i-1)*n+j,(fx-1)*n+fy,1<<30);
add((fx-1)*n+fy,(i-1)*n+j,0);
}
}
}
}
else
{
add((i-1)*n+j,t,1);
add(t,(i-1)*n+j,0);
}
}
}
while(ek())
{
updata();
}
cout<<n*n-num-sum<<endl;
}