#include<iostream> using namespace std; int n; int maxx[21][21]; int lie[21]; int aa[21]; int ans; void dfs(int x,int sum) { if(x>n) { ans=max(ans,sum); return; } int vv=0; for(int p=x;p<=n;p++) { vv+=aa[p]; } if(sum+vv<ans) return; for(int i=1;i<=n;i++) { if(lie[i]==0) { lie[i]=1; sum+=maxx[x][i]; x++; dfs(x,sum); x--; lie[i]=0; sum-=maxx[x][i]; } } } void print() { cout<<endl; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cout<<maxx[i][j]<<" "; } cout<<endl; } } int main() { cin>>n; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { cin>>maxx[i][j]; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { int qwe; cin>>qwe; maxx[j][i]*=qwe; } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { aa[i]=max(aa[i],maxx[i][j]); } } //print(); dfs(1,0); cout<<ans; return 0; }