#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <cmath>
using namespace std;
int n,cnt,S,T,ans,SS,TT,tot,mS,mT;
int to[1000000],next[1000000],val[1000000],head[10000],d[10000];
int v[110][110],si[110],sj[110];
queue<int> q;
void add(int a,int b,int c)
{
to[cnt]=b,val[cnt]=c,next[cnt]=head[a],head[a]=cnt++;
to[cnt]=a,val[cnt]=0,next[cnt]=head[b],head[b]=cnt++;
}
int dfs(int x,int mf)
{
if(x==TT) return mf;
int i,temp=mf,k;
for(i=head[x];i!=-1;i=next[i])
{
if(d[to[i]]==d[x]+1&&val[i])
{
k=dfs(to[i],min(temp,val[i]));
if(!k) d[to[i]]=0;
val[i]-=k,val[i^1]+=k,temp-=k;
if(!temp) break;
}
}
return mf-temp;
}
int bfs()
{
memset(d,0,sizeof(d));
while(!q.empty()) q.pop();
q.push(SS),d[SS]=1;
int i,u;
while(!q.empty())
{
u=q.front(),q.pop();
for(i=head[u];i!=-1;i=next[i])
{
if(!d[to[i]]&&val[i])
{
d[to[i]]=d[u]+1;
if(to[i]==TT) return 1;
q.push(to[i]);
}
}
}
return 0;
}
int main()
{
//freopen("bz3698.in","r",stdin);
scanf("%d",&n);
int i,j,b;
double a;
memset(head,-1,sizeof(head));
S=2*n+1,T=S+1,SS=T+1,TT=SS+1;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
scanf("%lf",&a),b=floor(a);
if(i==n&&j==n) continue;
if(j==n)
{
add(SS,i,b-si[i]),mS+=b-si[i],tot+=b-si[i];
if(a-b>1e-2) add(S,i,1);
}
else if(i==n)
{
add(j+n,TT,b-sj[j]),mT+=b-sj[j],tot+=b-sj[j];
if(a-b>1e-2) add(j+n,T,1);
}
else
{
si[i]+=b,sj[j]+=b,ans+=b;
if(a-b>1e-2) add(i,j+n,1);
}
}
}
add(S,TT,mS),add(SS,T,mT),add(T,S,1<<30);
while(bfs()) tot-=dfs(SS,1<<30);
if(tot)
{
printf("No");
return 0;
}
ans+=val[cnt-1],val[cnt-2]=val[cnt-1]=0;
for(i=head[SS];i!=-1;i=next[i]) val[i]=val[i^1]=0;
for(i=head[TT];i!=-1;i=next[i]) val[i]=val[i^1]=0;
SS=S,TT=T;
while(bfs()) ans+=dfs(SS,1<<30);
printf("%d",ans*3);
return 0;
}