#include <stdio.h>

struct Dice{
    int num[6];
};

void north_roll(struct Dice *dice);
void south_roll(struct Dice *dice);
void east_roll(struct Dice *dice);
void west_roll(struct Dice *dice);
void tate_roll(struct Dice *dice);
void yoko_roll(struct Dice *dice);
void yoko_reverse_roll(struct Dice *dice);

int main() {

    int i,j,k,l,m,n,flag,no;
    flag = 0;
    scanf("%d", &n);
    struct Dice dice[n];

    for(i = 0; i < n; i++){
        for (j = 0; j < 6; j++) {
            scanf("%d", &no);
            dice[i].num[j] = no;
        }
    }
    for (i = 0; i < n; i++) {
        for (j = i + 1; j < n; j++) {
            while(1){
                for(k = 1; k < 5; k++){
                    if(dice[i].num[0] == dice[j].num[0] && dice[i].num[1] == dice[j].num[1] && dice[i].num[2] == dice[j].num[2] && dice[i].num[3] == dice[j].num[3] && dice[i].num[4] == dice[j].num[4] && dice[i].num[5] == dice[j].num[5]){
                        flag = 1;
                        break;
                    }
                    for (l = 0; l < k; l++){
                        north_roll(&dice[j]);
                    }
                    for(m = 0; m < 4; m++){
                        if(dice[i].num[0] == dice[j].num[0] && dice[i].num[1] == dice[j].num[1] && dice[i].num[2] == dice[j].num[2] && dice[i].num[3] == dice[j].num[3] && dice[i].num[4] == dice[j].num[4] && dice[i].num[5] == dice[j].num[5]){
                            flag = 1;
                            break;
                        }
                        yoko_roll(&dice[j]);
                    }
                    for (l = 0; l < i; l++){
                        south_roll(&dice[j]);
                    }
                }
                if(flag == 1){break;}
                //printf("%d %d %d %d %d %d" ,dice[j].num[0],dice[j].num[1],dice[j].num[2],dice[j].num[3],dice[j].num[4],dice[j].num[5]);
                for(k = 1; k < 5; k++){
                    if(dice[i].num[0] == dice[j].num[0] && dice[i].num[1] == dice[j].num[1] && dice[i].num[2] == dice[j].num[2] && dice[i].num[3] == dice[j].num[3] && dice[i].num[4] == dice[j].num[4] && dice[i].num[5] == dice[j].num[5]){
                        flag = 1;
                        break;
                    }
                    for (l = 0; l < k; l++){
                        east_roll(&dice[j]);
                    }
                    for(m = 0; m < 4; m++){
                        if(dice[i].num[0] == dice[j].num[0] && dice[i].num[1] == dice[j].num[1] && dice[i].num[2] == dice[j].num[2] && dice[i].num[3] == dice[j].num[3] && dice[i].num[4] == dice[j].num[4] && dice[i].num[5] == dice[j].num[5]){
                            flag = 1;
                            break;
                        }
                        yoko_roll(&dice[j]);
                    }
                    for (l = 0; l < i; l++){
                        west_roll(&dice[j]);
                    }
                }
                break;
            }
        }
    }


    if(flag == 1){
        printf("No\n");
    }else{
        printf("Yes\n");
    }

    return 0;
}

void north_roll(struct Dice *dice) {
    int exp = dice->num[0];
    dice->num[0] = dice->num[1];
    dice->num[1] = dice->num[5];
    dice->num[5] = dice->num[4];
    dice->num[4] = exp;
}

void south_roll(struct Dice *dice) {
    int exp = dice->num[0];
    dice->num[0] = dice->num[4];
    dice->num[4] = dice->num[5];
    dice->num[5] = dice->num[1];
    dice->num[1] = exp;
}

void east_roll(struct Dice *dice) {
    int exp = dice->num[0];
    dice->num[0] = dice->num[3];
    dice->num[3] = dice->num[5];
    dice->num[5] = dice->num[2];
    dice->num[2] = exp;
}

void west_roll(struct Dice *dice) {
    int exp = dice->num[0];
    dice->num[0] = dice->num[2];
    dice->num[2] = dice->num[5];
    dice->num[5] = dice->num[3];
    dice->num[3] = exp;
}

void tate_roll(struct Dice *dice) {
    int exp = dice->num[0];
    dice->num[0] = dice->num[1];
    dice->num[1] = dice->num[5];
    dice->num[5] = dice->num[4];
    dice->num[4] = exp;
}

void yoko_roll(struct Dice *dice) {
    int exp = dice->num[1];
    dice->num[1] = dice->num[2];
    dice->num[2] = dice->num[4];
    dice->num[4] = dice->num[3];
    dice->num[3] = exp;
}

void yoko_reverse_roll(struct Dice *dice) {
    int exp = dice->num[1];
    dice->num[1] = dice->num[3];
    dice->num[3] = dice->num[4];
    dice->num[4] = dice->num[2];
    dice->num[2] = exp;
}

// for(i = 0; i < n; i++){
//     for (j = 0; j < 6; j++) {
//         printf("%d ", dice[i].num[j]);
//     }
//     putchar('\n');
// }



Measured memory_bytes: 2112