#include<iostream>
using namespace std;

int main()
{
	int n;
	int i, j, k, l, m;
	int tmp;
	int count=0;
	
	cin >> n;
	int Dice[n][6];
	
	for(i=0;i<n;i++){
		for(j=0;j<6;j++){
			cin >> Dice[i][j];
		}
	}

	for(i=0;i<n;i++){
		for(j=i+1;j<n;j++){
			for(k=0;k<4;k++){
				tmp=Dice[j][0];
				Dice[j][0]=Dice[j][1];
				Dice[j][1]=Dice[j][5];
				Dice[j][5]=Dice[j][4];
				Dice[j][4]=tmp;
				if(Dice[j][1]==Dice[i][1])
					goto Break;
				else{
					for(l=0;l<4;l++){
						tmp=Dice[j][0];
						Dice[j][0]=Dice[j][3];
						Dice[j][3]=Dice[j][5];
						Dice[j][5]=Dice[j][2];
						Dice[j][2]=tmp;
						if(Dice[j][0]==Dice[i][1]){
							tmp=Dice[j][0];
							Dice[j][0]=Dice[j][4];
							Dice[j][4]=Dice[j][5];
							Dice[j][5]=Dice[j][1];
							Dice[j][1]=tmp;
							goto Break;
						}
					}
				}
			}
			Return:;
		}
	}
	goto Exit;
	
	Break:;
	for(m=0;m<4;m++){
		tmp=Dice[j][0];
		Dice[j][0]=Dice[j][3];
		Dice[j][3]=Dice[j][5];
		Dice[j][5]=Dice[j][2];
		Dice[j][2]=tmp;
		if(Dice[j][0]==Dice[i][0]){
			if(Dice[i][0]==Dice[j][0]&&Dice[i][1]==Dice[j][1]&&Dice[i][2]==Dice[j][2]&&Dice[i][3]==Dice[j][3]&&Dice[i][4]==Dice[j][4]&&Dice[i][5]==Dice[j][5]){
				cout << "No" << endl;
				return 0;
			}
			else{
				goto Return;
			}
		}
	}
	goto Return;
	
	Exit:;
	cout << "Yes" << endl;
	return 0;
}
#include<iostream>
#include<vector>
using namespace std;

vector<long> dp;
vector<long> pre;

void rec(int i, vector<int>& nottaken, long scoresofar, int mask, int group)
{
  if(i==nottaken.size())
  {
    dp[mask]=max(dp[mask],scoresofar+pre[group]);
    return;
  }
  rec(i+1,nottaken,scoresofar,mask,group);
  rec(i+1,nottaken,scoresofar,mask^(1<<nottaken[i]),group^(1<<nottaken[i]));
  
}


int main(){
  int n;
  cin>>n;
  vector<vector<long>> a(n,vector<long>(n));
  for(int i=0;i<n;i++)
  {
    for(int j=0;j<n;j++)
      cin>>a[i][j];
  }
  
  pre.resize(1<<n);
  for(int mask=0;mask<(1<<n);mask++)
  {
    for(int i=0;i<n;i++)
    {
      if(mask&(1<<i))
      {
        for(int j=i+1;j<n;j++)
        {
          if(mask&(1<<j))
            pre[mask]+=a[i][j];
        }
      }
    }
  }
  
  
  dp.resize(1<<n,-99999999);
  dp[0]=0;
  for(int mask=0;mask<(1<<n);mask++)
  {
    vector<int> nottaken;
    for(int i=0;i<n;i++)
    {
      if(!(mask&(1<<i)))
         nottaken.push_back(i);
    }
    rec(0,nottaken,dp[mask],mask,0);
  }
  cout<<dp[(1<<n)-1];
  
}