//Author:PanDaoxi
#include <iostream>
using namespace std;
//a=收益
//book=第i个人是否分配了工作
//maxl=最高收入
//n=工作数目
int a[31][31],book[31],maxl=0,n;
void dfs(int step,int t){
//step=第几份工作 t=收益
if(step>n){
//分配完毕
if(t>maxl) maxl=t;
return 0;
}
for(int i=1;i<=n;i++){
//判断第i个人是否被分配
if(book[i]==0){
book[i]=1;
t+=a[step][i];
dfs(step+1,t);
//回溯
t-=a[step][i];
book[i]=0;
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
dfs(1,0);
cout<<maxl<<endl;
return 0;
}