#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int n, p[25][25], q[25][25], f[25], s, ans;
int maxs[25], maxsum[25];
bool vis[25];
void dfs(int step)
{
if (s + maxsum[step] <= ans)
{
return;
}
if (step == n + 1)
{
ans = max(ans, s);
return ;
}
for (int i = 1; i <= n; i++)
if (!vis[i])
{
f[step] = i;
vis[i] = true;
s += p[step][i] * q[i][step];
dfs(step + 1);
vis[i] = false;
s -= p[step][i] * q[i][step];
}
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
cin >> p[i][j];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
cin >> q[i][j];
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
maxs[i] = max(maxs[i], p[i][j] * q[j][i]);
}
}
for (int i = n; i >= 1; i--)
{
maxsum[i] = maxsum[i + 1] + maxs[i];
}
dfs(1);
cout << ans << endl;
return 0;
}