#include <iostream>
#include <cstring>
#include <vector>
using namespace std;

// #define DEBUG

int test(string D1[][6], string D2[][6]);
void rot_N(string Din[][6]);
void rot_S(string Din[][6]);
void rot_E(string Din[][6]);
void rot_W(string Din[][6]);
void rot_swap(string Din[][6]);


int main()
{
        int cnt, flag = 0;
        vector<int> result;

        cin >> cnt;

        string Din[cnt][6], (*pDin1)[6], (*pDin2)[6];

        for(int i = 0; i < cnt; i++) {
                for(int j = 0; j < 6; j++) {
                        cin >> Din[i][j];
                }
        }
        for(int i1 = 0; i1 < cnt; i1++) {
                pDin1 = Din + i1;

#ifdef DEBUG
                cout << "*pDin1: " <<  (*pDin1)[2] << endl;
#endif

                for(int i2 = i1+1; i2 < cnt; i2++) {
                        pDin2 = Din + i2;

#ifdef DEBUG
                cout << "*pDin2: " <<  (*pDin2)[2] << endl;
#endif

                        for(int k = 0; k < 6; k++) {
                                if((*pDin1)[0] == (*pDin2)[k]) {
                                        switch(k) {
                                                case 0:
#ifdef DEBUG
        cout << "case: 0" << endl;
#endif
                                                        result.push_back(test(pDin1,pDin2));
                                                        break;
                                                case 1:
#ifdef DEBUG
        cout << "case: 1" << endl;
#endif
                                                        rot_N(pDin2);
                                                        result.push_back(test(pDin1,pDin2));
                                                        break;
                                                case 2:
#ifdef DEBUG
        cout << "case: 2" << endl;
#endif
                                                        rot_W(pDin2);
                                                        result.push_back(test(pDin1,pDin2));
                                                        break;
                                                case 3:
#ifdef DEBUG
        cout << "case: 3" << endl;
#endif
                                                        rot_E(pDin2);
                                                        result.push_back(test(pDin1,pDin2));
                                                        break;
                                                case 4:
#ifdef DEBUG
        cout << "case: 3" << endl;
        cout << "case: 4" << endl;
#endif
                                                        rot_S(pDin2);
                                                        result.push_back(test(pDin1,pDin2));
                                                        break;
                                                case 5:
#ifdef DEBUG
        cout << "case: 5" << endl;
#endif
                                                        rot_swap(pDin2);
                                                        result.push_back(test(pDin1,pDin2));
                                                        break;
                                                default:
                                                        break;
                                        }
                                }
                        }
                }
        }

        for(vector<int>::iterator ite = result.begin(); ite != result.end(); ++ite) {
                flag |= *ite;
        }

        if(flag) {
                cout << "No" << endl;
        } else {
                cout << "Yes" << endl;
        }

        return 0;
}

void rot_N(string Din[][6])
{
#ifdef DEBUG
        cout << "rot_N" << endl;
#endif
        string tmp;

        tmp = Din[0][0];
        Din[0][0] = Din[0][1];
        Din[0][1] = Din[0][5];
        Din[0][5] = Din[0][4];
        Din[0][4] = tmp;
}

void rot_W(string Din[][6])
{
#ifdef DEBUG
        cout << "rot_W" << endl;
#endif

        string tmp;

        tmp = Din[0][0];
        Din[0][0] = Din[0][2];
        Din[0][2] = Din[0][5];
        Din[0][5] = Din[0][3];
        Din[0][3] = tmp;
}

void rot_E(string Din[][6])
{
#ifdef DEBUG
        cout << "rot_E" << endl;
#endif
        string tmp;

        tmp = Din[0][0];
        Din[0][0] = Din[0][3];
        Din[0][3] = Din[0][5];
        Din[0][5] = Din[0][2];
        Din[0][2] = tmp;
}

void rot_S(string Din[][6])
{
#ifdef DEBUG
        cout << "rot_S" << endl;
#endif

        string tmp;

        tmp = Din[0][0];
        Din[0][0] = Din[0][4];
        Din[0][4] = Din[0][5];
        Din[0][5] = Din[0][1];
        Din[0][1] = tmp;
}

void rot_swap(string Din[][6])
{
#ifdef DEBUG
        cout << "rot_swap" << endl;
#endif

        string tmp0, tmp1;

        tmp0 = Din[0][0];
        Din[0][0] = Din[0][5];
        Din[0][5] = tmp0;
        tmp1 = Din[0][1];
        Din[0][1] = Din[0][4];
        Din[0][4] = tmp1;
}

int test(string D1[][6], string D2[][6])
{       
        int flag = 0;
        string tmp;
#ifdef DEBUG
        for(int i = 0; i < 6; i++) { cout << "In test: " << D1[0][i] << " " << D2[0][i] << endl; }
#endif  
        if(D1[0][5] == D2[0][5]) {
                for(int j = 1; j <= 4; j++) {
                        if(D1[0][1] == D2[0][j]) {
                                switch(j) {
                                case 1: 
                                        if(D1[0][2] == D2[0][2]) {
                                                if(D1[0][3] == D2[0][3] && D1[0][4] == D2[0][4] && D1[0][5] == D2[0][5]) {
                                                        flag = 1;
                                                } }
                                        break;
                                case 2:
                                        tmp = D2[0][1];
                                        D2[0][1] = D2[0][2];
                                        D2[0][2] = D2[0][4];
                                        D2[0][4] = D2[0][3];
                                        D2[0][3] = tmp;
                                        if(D1[0][2] == D2[0][2]){
                                                if(D1[0][3] == D2[0][3] && D1[0][4] == D2[0][4] && D1[0][5] == D2[0][5]) {
                                                        flag = 1;
                                                } }
                                        break;
                                case 3:
                                        tmp = D2[0][1];
                                        D2[0][1] = D2[0][3];
                                        D2[0][3] = D2[0][4];
                                        D2[0][4] = D2[0][2];
                                        D2[0][2] = tmp;
                                        if(D1[0][2] == D2[0][2]) {
                                                if(D1[0][3] == D2[0][3] && D1[0][4] == D2[0][4] && D1[0][5] == D2[0][5]) {
                                                        flag = 1;
                                                } }
                                        break;
                                case 4:
                                        tmp = D2[0][4];
                                        D2[0][4] = D2[0][1];
                                        D2[0][1] = tmp;
                                        tmp = D2[0][2];
                                        D2[0][2] = D2[0][3];
                                        D2[0][3] = tmp;
                                        if(D1[0][2] == D2[0][2]) {
                                                if(D1[0][3] == D2[0][3] && D1[0][4] == D2[0][4] && D1[0][5] == D2[0][5]) {
                                                        flag = 1;
                                                } }
                                        break;
                                default:
                                        break;
                                }
                        }
                }
        }

#ifdef DEBUG
        cout << "test: " << flag << endl;
#endif
        return flag;
}



Measured memory_bytes: 3212