#include <stdio.h>
#include <string.h>
#define maxn 128
#define For(i, a, b) for(int i=(a);i<=(b);++i)
int cap[2*maxn][2*maxn],cost[2*maxn][2*maxn], n, source, sink;
void citire()
{
freopen("cc.in", "r", stdin);
scanf("%d\n", &n);
int i, j;
For(i, 1,n)
For(j, 1, n)
{
int p;
scanf("%d", &p);
cost[i][j+n]=p;
cost[j+n][i]=-p;
cap[i][j+n]=1;
}
source=0;
sink=2*n+1;
For(i, 1, n) cap[source][i]=1;
For(i, n+1, sink-1) cap[i][sink]=1;
}
int bellman()
{
int i, j,k, ok=1;
int t[maxn], d[maxn];
memset(t, -1, sizeof(t));
memset(d, 0x3f3f3f3f, sizeof(d));
d[source]=0;
//for(ok=k=0;k<=sink && ok;k++)
while(ok)
{
ok=0;
For(i, source, sink)
For(j, source, sink)
if(cap[i][j])
if(d[i]+cost[i][j]<d[j])
{
d[j]=d[i]+cost[i][j];
t[j]=i;
ok=1;
}
}
if(t[sink]==-1) return 0;
i=sink;
while(i!=source) cap[t[i]][i]=0, cap[i][t[i]]=1, i=t[i];
// printf("da\n");
return 1;
}
int flux()
{
int flow=0;
while(bellman());
int i, j;
For(i,1,n)
{
For(j, n+1, sink-1)if(cap[i][j]==0) flow+=cost[i][j];
}
// for(i=1;i<=n;i++)
//for(j=n+1;j<=sink-1;j++) if(cap[i][j]==0) flow+=cost[i][j];
return flow;
}
int main()
{
citire();
freopen("cc.out", "w", stdout);
printf("%d\n", flux());
int i, j;
return 0;
}