#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <limits.h>
using namespace std;
int n;
int dis[30][30];
int fmin1[30][30];
int visited[30];
int mymin(int a, int b)
{
return a < b ? a : b;
}
int dfs(int start, int num)
{
if (num == n - 1)
{
return dis[start][1];
}
if (fmin1[start][num] != INT_MAX)
{
return fmin1[start][num];
}
for (int i = 2; i <= n; i++)
{
if (i == start)
{
continue;
}
if (visited[i])
{
continue;
}
visited[i] = 1;
fmin1[start][num] = mymin(fmin1[start][num], dfs(i, num + 1) + dis[start][i]);
visited[i] = 0;
}
return fmin1[start][num];
}
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
for (int u = 1; u <= n; u++)
{
scanf("%d", &dis[i][u]);
}
}
for (int i = 0; i <= 25; i++)
{
visited[i] = 0;
for (int u = 0; u <= 25; u++)
{
fmin1[i][u] = INT_MAX;
}
}
visited[1] = 1;
dfs(1,1) ;
cout << fmin1[1][1] << endl;
return 0;
}