#include <stdio.h>
    
typedef struct {
    int cur;
    int n;
    int s;
    int e;
    int w;
} Dice;
    
typedef enum {
    POSITIVE,
    NEGATIVE
} ROLL_DIR;
   
    
void dice_init(Dice * dice)
{
    dice->cur = 1;
    dice->n = 5;
    dice->s = 2;
    dice->e = 3;
    dice->w = 4;
}
    
void v_index_change(int *cur, int *a, int *b)
{
    int tmp = *cur;
    *cur = *a;
    *b = tmp;
    *a = 7 - tmp;
}
    
void h_index_change(int *p1, int *p2, int *p3, int *p4)
{
    int tmp = *p1;
    *p1 = *p4;
    *p4 = *p3;
    *p3 = *p2;
    *p2 = tmp;
}
    
void v_roll(int num, char dir, Dice *dice)
{
    int i;
    for (i = 0; i < num; i++) {
        if (dir == 'N') {
            v_index_change(&dice->cur, &dice->s, &dice->n);
        }
        else if (dir == 'S') {
            v_index_change(&dice->cur, &dice->n, &dice->s);
        }
        else if (dir == 'E') {
            v_index_change(&dice->cur, &dice->w, &dice->e);
        }
        else if (dir == 'W') {
            v_index_change(&dice->cur, &dice->e, &dice->w);
        }
    }
}
    
void h_roll(char sp, int num, ROLL_DIR dir, Dice *dice)
{
    int i;
    for (i = 0; i < num; i++) {
        if (sp == 'N') {
            if (dir == POSITIVE) {
                h_index_change(&dice->n, &dice->w, &dice->s, &dice->e);
            }
            else if (dir == NEGATIVE) {
                h_index_change(&dice->n, &dice->e, &dice->s, &dice->w);
            }
        }
        else if (sp == 'S') {
            if (dir == POSITIVE) {
                h_index_change(&dice->s, &dice->e, &dice->n, &dice->w);
            }
            else if (dir == NEGATIVE) {
                h_index_change(&dice->s, &dice->w, &dice->n, &dice->e);
            }
        }
        else if (sp == 'E') {
            if (dir == POSITIVE) {
                h_index_change(&dice->e, &dice->n, &dice->w, &dice->s);
            }
            else if (dir == NEGATIVE) {
                h_index_change(&dice->e, &dice->s, &dice->w, &dice->n);
            }
        }
        else if (sp == 'W') {
            if (dir == POSITIVE) {
                h_index_change(&dice->w, &dice->s, &dice->e, &dice->n);
            }
            else if (dir == NEGATIVE) {
                h_index_change(&dice->w, &dice->n, &dice->e, &dice->s);
            }
        }
    }
}
   
int check(int index, Dice *dice1, Dice *dice2, int *num1, int *num2)
{
    int i, isMatch = 0;
    if (index == dice2->cur) {
    }
    else if (index == dice2->n) {
        v_roll(1, 'S', dice2);
    }
    else if (index == dice2->s) {
        v_roll(1, 'N', dice2);
    }
    else if (index == dice2->e) {
        v_roll(1, 'W', dice2);
    }
    else if (index == dice2->w) {
        v_roll(1, 'E', dice2);
    }
    else {
        v_roll(2, 'S', dice2);
    }
    
    for (i = 0; i < 4; i++) {
        h_roll('S', 1, POSITIVE, dice2);
    
        if (num1[dice1->cur - 1] == num2[dice2->cur - 1] &&
            num1[dice1->n - 1] == num2[dice2->n - 1] &&
            num1[dice1->s - 1] == num2[dice2->s - 1] &&
            num1[dice1->w - 1] == num2[dice2->w - 1] &&
            num1[dice1->e - 1] == num2[dice2->e - 1] &&
            num1[7 - dice1->cur - 1] == num2[7 - dice2->cur - 1])
        {
            isMatch = 1;
            break;
        }
    }
    return isMatch;
}
   
int main(int argc, char** argv)
{
    Dice dice1, dice2;
    
    int i, j, k, count;
    int num[100][6];
   
    scanf("%d", &count);
   
    for (i = 0; i < count; i++) {
        for (j = 0; j < 6; j++) {
            scanf("%d", &num[i][j]);
        }
    }
   
    for (i = 0; i < count - 1; i++) {
        for (j = i + 1; j < count; j++) {
            dice_init(&dice1);
            dice_init(&dice2);
   
            for (k = 0; k < 6; k++) {
                if (check(k+1, &dice1, &dice2, num[i], num[j])) {
                    printf("No\n");
                    return 0;
                }
            }
        }
    }
    
    printf("Yes\n");
    return 0;
}

Measured memory_bytes: 1812