#include<iostream>
#include<cstdlib>
#include<ctime>
#include<cmath>
using namespace std;
int a[1001][1001],ans=2147483647;
int b[1001][1001];
int c[1001];
int d[1001];
int n;
int jsuan(){
long long sum=0;
for(int i=1;i<=n;i++){
sum+=(a[c[i]][d[i]]*b[d[i]][c[i]]);
}
return sum;
}
void mon(){
double At=20000,Dt=0.99,Bt=1e-10;
for(register double T=At; T>Bt; T*=Dt) {
int x=rand()%n+1,y=rand()%n+1;
int z=rand()%n+1,k=rand()%n+1;
swap(c[x],c[y]);
swap(d[z],d[k]);
int sum=jsuan();
if(sum>ans) ans=sum;
else if(exp((ans-sum)/T)<(double(rand())/RAND_MAX))
swap(a[x],a[y]);
}
}
int main() {
srand(time(0));
cin>>n;
for(int i=1;i<=n;i++){
d[i]=i;
for(int j=1;j<=n;j++)
cin>>a[i][j];
}
for(int i=1;i<=n;i++){
c[i]=i;
for(int j=1;j<=n;j++)
cin>>b[i][j];
}
ans=0;
for(int i=1;i<=4700;i++){
mon();
}
cout<<ans<<endl;
}