#include <stdio.h>
#include <string.h>
#define MAX_N 205
#define INF 0x3f3f3f3f
#define FIN "cc.in"
#define FOUT "cc.out"
#define FOR(i, a, b) for (i = (a); i < (b); i++)
int N, src, dest, Res, C[MAX_N][MAX_N], D[MAX_N], V[MAX_N], up[MAX_N];
char R[MAX_N][MAX_N], U[MAX_N];
int augment(void)
{
int i, min, pos;
memset(U, 0, sizeof(U));
memset(D, 0x3f, sizeof(D));
D[src] = 0;
while (1)
{
min = INF, pos = -1;
FOR (i, 0, dest+1)
if (min > D[i] && !U[i])
min = D[i], pos = i;
if (pos == -1) break;
U[pos] = 1;
FOR (i, 0, dest+1)
if (D[i] > D[pos]+C[pos][i]+V[pos]-V[i] && R[pos][i] > 0)
D[i] = D[pos]+C[pos][i]+V[pos]-V[i], up[i] = pos;
}
FOR (i, 0, dest+1) V[i] += D[i];
return D[dest] != INF;
}
int main(void)
{
int i, j;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d", &N);
FOR (i, 1, N+1) FOR (j, N+1, (N<<1)+1)
{
scanf("%d", C[i]+j);
C[j][i] = -C[i][j];
R[i][j] = 1;
}
src = 0; dest = (N<<1)+1;
FOR (i, 1, N+1) R[src][i] = 1;
FOR (i, N+1, (N<<1)+1) R[i][dest] = 1;
while (augment())
{
for (i = dest; i != src; i = up[i])
R[up[i]][i]--, R[i][up[i]]++;
Res += V[dest];
}
printf("%d\n", Res);
return 0;
}