#include <cstdio>
#include <stdlib.h>

int main()
{
    int s[600];
    int t[6];
    int c = 0;
    char h[4] = {'N', 'S', 'W', 'E'};
    int n;
    bool a = false;
    scanf("%d", &n);
    for (int i = 0; i < 6 * n; i++)
    {
        scanf("%d", &s[i]);
    }
    for (int i = 0; i < n; i++)
    {
        while (1)
        {
            int k = rand() % 4;
            if (h[k] == 'N')
            {
                t[4] = s[0 + i * 6];
                t[0] = s[1 + i * 6];
                t[1] = s[5 + i * 6];
                t[5] = s[4 + i * 6];
                t[2] = s[2 + i * 6];
                t[3] = s[3 + i * 6];
            }
            if (h[k] == 'S')
            {
                t[0] = s[4 + i * 6];
                t[1] = s[0 + i * 6];
                t[5] = s[1 + i * 6];
                t[4] = s[5 + i * 6];
                t[2] = s[2 + i * 6];
                t[3] = s[3 + i * 6];
            }
            if (h[k] == 'W')
            {
                t[0] = s[2 + i * 6];
                t[2] = s[5 + i * 6];
                t[5] = s[3 + i * 6];
                t[3] = s[0 + i * 6];
                t[1] = s[1 + i * 6];
                t[4] = s[4 + i * 6];
            }
            if (h[k] == 'E')
            {
                t[2] = s[0 + i * 6];
                t[5] = s[2 + i * 6];
                t[3] = s[5 + i * 6];
                t[0] = s[3 + i * 6];
                t[1] = s[1 + i * 6];
                t[4] = s[4 + i * 6];
            }
            for (int j = 0; j < 6; j++)
            {
                s[j + i * 6] = t[j];
            }
            for (int j = i + 1; j < n; j++)
            {
                if (s[0 + i * 6] == s[0 + j * 6] && s[1 + i * 6] == s[1 + j * 6] && s[2 + i * 6] == s[2 + j * 6] && s[3 + i * 6] == s[3 + j * 6] && s[4 + i * 6] == s[4 + j * 6] && s[5 + i * 6] == s[5 + j * 6])
                {
                    a = true;
                    break;
                }
            }
            if (c == 1000)
            {
                break;
            }
            c += 1;
        }
    }

    if (a == false)
    {
        printf("Yes\n");
    }
    if (a == true)
    {
        printf("No\n");
    }
}

#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<n;i++)
#define cinf(n,x) for(int i=0;i<(n);i++)cin>>x[i];
#define ft first
#define sc second
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define all(v) (v).begin(),(v).end()
#define mod 1000000007
#define FS fixed<<setprecision(15)
using namespace std;
typedef long long ll;
template<class T> using V=vector<T>;
using Graph = vector<vector<int>>;
using P=pair<ll,ll>;
typedef unsigned long long ull;
typedef long double ldouble;
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }

const ll INF=1e18;

ll dp[200005][5];

int main(){
    cin.tie(0);ios::sync_with_stdio(false);
    ll n;
    cin>>n;
    V<ll> a(n);
    cinf(n,a);
    ll k=1+n%2;
    rep(i,n+1)rep(j,k+1)dp[i][j]=-INF;
    dp[0][0]=0;
    rep(i,n){
        rep(j,k+1){
            chmax(dp[i+1][j+1],dp[i][j]);
            ll now=dp[i][j];
            if((i+j)%2==0) now+=a[i];
            chmax(dp[i+1][j],now);
        }
    }
    cout<<dp[n][k]<<endl;
}
//ペナルティ出しても焦らない　ACできると信じろ！！！
/*
V,P(大文字)使用不可
乗算などの際にオーバーフローに注意せよ！
(適切にmodをとれ　にぶたんで途中で切り上げろ)
制約をよく読め！
(全探索できるなら全探索しろ)
stringの計算量(扱い)注意
コーナー注意！(特に数値が小さいものについては要検証)
N行出力のときは'\n'
グリッド上では行先が範囲内におさまるかif文で確認(RE注意)
if文ではちゃんと比較演算子==を使え(=でもエラー出ない)
配列(vector)の大きさが0か1以上かで場合分けせよ(RE注意)
(vector<int> a(m)でm==0というものはできない)
modはなるべく最後に取れ！
*/