using namespace std;
#include<stdio.h>
#include <queue>
#include<string.h>
#define nmax 205
#define oo 0x3f3f3f3f
FILE *f=fopen("cc.in","r"), *g=fopen("cc.out","w");
int n, cost[nmax][nmax], cap[nmax][nmax], F[nmax][nmax],viz[nmax],y,t[nmax];
int sum;
void citire()
{
int i,j;
fscanf(f,"%d",&n);
for(i=2;i<=n+1;i++)
for(j=n+2;j<=2*n+1;j++)
{
fscanf(f,"%d",&y);
cost[i][j]=y;
cost[j][i]=-y;
if(i+n!=j) cap[i][j]=1;
}
for(i=2;i<=n+1;i++) cap[1][i]=1;
for(j=n+2;j<=2*n+1;j++) cap[j][2*n+2]=1;
}
int bellman_ford_moore()
{
int i,x,Q[nmax*nmax],p,u,d[nmax];
memset(d,oo, sizeof(d));
memset(viz, 0, sizeof(viz));
Q[0]=1;
d[1]=0;
viz[1]=1;
t[1]=-1;
p=u=0;
while(p<=u)
{
x=Q[p++];
//viz[x]=0;
for(i=2;i<=2*n+2;i++)
if(F[x][i]<cap[x][i])
{
if(cost[x][i]+d[x]<d[i])
{
d[i]=cost[x][i]+d[x];
if(!viz[i])
{
t[i]=x;
viz[i]=1;
Q[++u]=i;
}
}
}
}
if(viz[2*n+2]) return 0;
return 1;
}
int b_f_m()
{
int Q[nmax*nmax], p=0, u=0;
int x, d[nmax],i;
memset(d, oo, sizeof(d));
memset(t, 0, sizeof(t));
d[1]=0;
Q[0]=1;
while(p<=u)
{
x=Q[p++];
for(i=1;i<=2*n+2;++i)
if(cap[x][i]>F[x][i])
if(d[x]+cost[x][i] < d[i])
d[i]=d[x]+cost[x][i],
t[i]=x,
Q[++u]=i;
}
return t[2*n+2];
}
void ek()
{
int i;
memset(viz,0,sizeof(viz));
do{
if(!b_f_m()) return;
for(i=2*n+2;i!=1;i=t[i])
{
F[t[i]][i]++;
F[i][t[i]]--;
}
}while(1);
}
void afis()
{
int i,j;
for(i=2;i<=n+1;i++)
for(j=n+2;j<=2*n+1;j++)
if(F[i][j])
sum+=cost[i][j];
fprintf(g,"%d\n",sum);
printf("%d\n", sum);
/*for(i=1;i<=2*n+2;i++)
{
for(j=1;j<=2*n+2;j++) fprintf(g,"%d ",F[i][j]);
fprintf(g,"\n");
}*/
}
int main()
{
citire();
ek();
afis();
return 0;
}