package ziwang;
import java.util.Scanner;
public class ZiWangMax {
public static int[] ASbu=new int[20];
public static int[] BSbu=new int[20];
public static int ASbu_pc=0;
public static int nodeNum=0;
public static int[][] node_Map;
public static int finalRes=0;
public static int A_B_Distance( ){
int ABSum=0;
int pc=0;
for(int i=0;i<nodeNum;i++){//a de yuanshu he b de yuan shu
int flag=0;
for(int j=0;j<20;j++){
if(ASbu[i]==i)
flag=1;
break;
}
if(flag==0){
BSbu[pc++]=i;
}
}
//ji suan a b sum
for(int i=0;i<20;i++){
{
if(ASbu[i]!=-1){
for(int j=0;j<pc;j++){
ABSum+=node_Map[ASbu[i]][BSbu[j]];
}
}
}
}
return ABSum;
}
public static boolean isRepeat(int m){
boolean res=true;
for(int i=0;i<ASbu_pc;i++){
if(ASbu[i]==m)
res=false;
}
return res;
}
public static void aNodeNum_DFS(int step,int totalSteps,int allNodes){/// aNodeNum_DFS(0,aNodeNum,nodeNum);
if(step==totalSteps){
int temp=A_B_Distance( );
if(finalRes<temp)
finalRes=temp;
return;
}
for(int i=0;i<allNodes;i++){
if(isRepeat(i)){
ASbu[i]=i;
aNodeNum_DFS(step+1,totalSteps,allNodes);
ASbu[i]=-1;
}
}
}
public static void main(String[] args){
Scanner in=new Scanner(System.in);
nodeNum=in.nextInt();
node_Map=new int[nodeNum][nodeNum];
for(int i=0;i<nodeNum;i++){
for(int j=0;j<nodeNum;j++){
node_Map[i][j]=in.nextInt();
}
}
for(int i=0;i<20;i++){
ASbu[i]=-1;
BSbu[i]=-1;
}
for(int aNodeNum=1;aNodeNum<=nodeNum/2;aNodeNum++){
aNodeNum_DFS(0,aNodeNum,nodeNum);
}
System.out.println(finalRes);
}
}