#include <iostream>
#include <string>
#define MAXNUM 100
using namespace std;

class DICE {
public:
    // int top, front, right, left, back, bottom;
    int values[6];
    void setValue (int *diceValue);
    void rotate (char order);
    int showValue (int direction);
};

void DICE::setValue (int *diceValue) {
    for (int i=0; i<6; i++) {
        DICE::values[i] = diceValue[i];
    }
}

void DICE::rotate (char order) {
    int tmp;
    switch (order) {
        case 'E':
            tmp = DICE::values[2];
            DICE::values[2] = DICE::values[0];
            DICE::values[0] = DICE::values[3];
            DICE::values[3] = DICE::values[5];
            DICE::values[5] = tmp;
            break;
        case 'N':
            tmp = DICE::values[4];
            DICE::values[4] = DICE::values[0];
            DICE::values[0] = DICE::values[1];
            DICE::values[1] = DICE::values[5];
            DICE::values[5] = tmp;
            break;
        case 'S':
            tmp = DICE::values[1];
            DICE::values[1] = DICE::values[0];
            DICE::values[0] = DICE::values[4];
            DICE::values[4] = DICE::values[5];
            DICE::values[5] = tmp;
            break;
        case 'W':
            tmp = DICE::values[3];
            DICE::values[3] = DICE::values[0];
            DICE::values[0] = DICE::values[2];
            DICE::values[2] = DICE::values[5];
            DICE::values[5] = tmp;
            break;
        case 'R': // for rotation right to left
            tmp = DICE::values[3];
            DICE::values[3] = DICE::values[1];
            DICE::values[1] = DICE::values[2];
            DICE::values[2] = DICE::values[4];
            DICE::values[4] = tmp;
            break;
        default:
            break;
    }
}

int DICE::showValue (int direction) {
    int value;
    value = DICE::values[direction];
    return value;
}

bool chkSame (int *values1, int *values2) {
    DICE dice1, dice2;
    dice1.setValue(values1);
    dice2.setValue(values2);
    for (int e=0; e<4; e++) {
        for (int n=0; n<4; n++) {
            for (int r=0; r<4; r++) { // think rotation
                int sum = 0;
                for (int i=0; i<6; i++) {
                    if (dice1.values[i] == dice2.values[i]) {
                        sum += 1;
                    }
                }
                if (sum == 6) {
                    return true;
                }
                dice2.rotate('R');
            }
            dice2.rotate('N');
        }
        dice2.rotate('E');
    }
    return false;
}

// are there any same pairs?
bool solve (int *diceValue, int num) {
    DICE dice[MAXNUM];
    for (int i=0; i<num; i++) {
        for (int ii=0; ii<6; ii++) {
            dice[i].values[ii] = diceValue[i*6+ii];
        }
    }
    for (int i=0; i < num-1; i++) {
        for (int ii=i+1; ii<num; ii++) {
            if ( chkSame( dice[i].values, dice[ii].values ) ) {
                return true;
            }
        }
    }
    return false;
}

int main () {
    // input
    int num;
    cin >> num;

    int diceValue[6*num];
    for (int i=0; i<num; i++) {
        for (int ii=0; ii<6; ii++) {
            cin >> diceValue[6*i+ii];
        }
    }

    // solve
    // if same exists true, else false
    bool result = solve (diceValue, num);

    // output
    if (result) {
        cout << "No" << endl;
    } else {
        cout << "Yes" << endl;
    }
}


Measured memory_bytes: 3124