#include <iostream>
using namespace std;
#define N 3
int data[N][N] = {{0,50,30},{50,0,40},{30,40,0}};
int subnet[2][N];
int maxTraffic = 0;
int getTraffic(int node, int netNumber, int size){//节点 子网 子网长度
int ret = 0;
for(int i = 0; i < size; i++){
if(subnet[netNumber][i]){
ret += data[node][i];
}
}
return ret;
}
void getMax(int curStep, int targetStep,int curTraffic, int startPos, int size){//当前步 目标步 当前流量 开始位置 长度
if(curStep == targetStep) return;
for(int i = startPos; i < size; i++){
subnet[0][i] = 0;//将电脑0离开集合0,将电脑0放在集合1
subnet[1][i] = 1;
int trfficWithSubnet1 = getTraffic(i, 1, size);//计算电脑0在集合0中流量
int trfficWithSubnet0 = getTraffic(i, 0, size);//计算电脑0在集合1中流量
int tmp = curTraffic;
curTraffic = curTraffic - trfficWithSubnet1 + trfficWithSubnet0;//当前流量=当前流量-电脑0在集合0中流量+电脑0在集合1中流量
if(curTraffic > maxTraffic) maxTraffic = curTraffic;
getMax(curStep + 1, targetStep, curTraffic, i + 1, size);
subnet[0][i] = 1;//若迭代发生错误,恢复前一步状态
subnet[1][i] = 0;//
curTraffic = tmp;//
}
}
int main(){
//freopen("input.txt", "r", stdin);
/*int N;
cin >> N;*/
/*for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
cin >> data[i][j];
}
}*/
for(int i = 0; i < N; i++){
subnet[0][i] = 1;//将所有电脑放在集合0
subnet[1][i] = 0;
}
maxTraffic = 0;
getMax(0, N/2, 0, 0, N);
//cout << maxTraffic << endl;
printf("%d\n",maxTraffic );
}