#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

void print_dice(int dice[7]){
    for(int i=1; i<7; i++){
        printf("%d ", dice[i]);
    }
    printf("\n");
}

void move_E(int dice[7]){
    int new_dice[7];
    new_dice[2]=dice[2];
    new_dice[5]=dice[5];
    new_dice[3]=dice[1];
    new_dice[1]=dice[4];
    new_dice[4]=dice[6];
    new_dice[6]=dice[3];

    for(int i=0; i<7; i++){
        dice[i]=new_dice[i];
    } 
}

void move_W(int dice[7]){
    int new_dice[7];
    new_dice[2]=dice[2];
    new_dice[5]=dice[5];
    new_dice[1]=dice[3];
    new_dice[4]=dice[1];
    new_dice[6]=dice[4];
    new_dice[3]=dice[6];

    for(int i=0; i<7; i++){
        dice[i]=new_dice[i];
    } 
}

void move_N(int dice[7]){
    int new_dice[7];
    new_dice[3]=dice[3];
    new_dice[4]=dice[4];
    new_dice[1]=dice[2];
    new_dice[2]=dice[6];
    new_dice[6]=dice[5];
    new_dice[5]=dice[1];

    for(int i=0; i<7; i++){
        dice[i]=new_dice[i];
    } 
}

void move_S(int dice[7]){
    int new_dice[7];
    new_dice[3]=dice[3];
    new_dice[4]=dice[4];
    new_dice[2]=dice[1];
    new_dice[6]=dice[2];
    new_dice[5]=dice[6];
    new_dice[1]=dice[5];

    for(int i=0; i<7; i++){
        dice[i]=new_dice[i];
    } 
}

void rot(int dice[7]){
    int new_dice[7];
    new_dice[1]=dice[1];
    new_dice[6]=dice[6];
    new_dice[2]=dice[3];
    new_dice[3]=dice[5];
    new_dice[5]=dice[4];
    new_dice[4]=dice[2];

    for(int i=0; i<7; i++){
        dice[i]=new_dice[i];
    } 
}

void rots(int dice[7], int count){
    int new_dice[7];
    for(int i=0; i<7; i++){
        new_dice[i]=dice[i];
    } 
    for(int i=0; i<count; i++){
        rot(new_dice);
    }
    for(int i=0; i<7; i++){
        dice[i]=new_dice[i];
    } 
}

void ad_1(int dice[7], int new_dice[7]){
    if(dice[1] == new_dice[1]){
        ;
    }
    else if(dice[2] == new_dice[1]){
        move_N(dice);
    }
    else if(dice[3] == new_dice[1]){
        move_W(dice);
    }
    else if(dice[4] == new_dice[1]){
        move_E(dice);
    }
    else if(dice[5] == new_dice[1]){
        move_S(dice);
    }
    else if(dice[6] == new_dice[1]){
        move_N(dice);
        move_N(dice);
    }
}


void ad_2(int dice[7], int new_dice[7]){
    if(dice[2] == new_dice[2]){
        ;
    }
    else if(dice[3] == new_dice[2]){
        rot(dice);
    }
    else if(dice[5] == new_dice[2]){
        for(int i=0; i<2; i++){
            rot(dice);
        }
    }
    else if(dice[4] == new_dice[2]){
        for(int i=0; i<3; i++){
            rot(dice);
        }
    }
}

int check(int dice[7], int new_dice[7]){
    int flag = 1;
    for(int i=1; i<7; i++){
        if(dice[i]!=new_dice[i]){
            flag=0;
            break;
        }
    }
    return (flag);
}

void copy_dice(int dice[], int dice_copy[]){
    for(int i=0; i<7; i++){
        dice_copy[i] = dice[i];
    }
}

void rot_check(int dice[], int dice_copy[], int new_dice[], int *all_flag){
    for(int i=0; i<4; i++){
        //printf("i:%d\n", i);
        //print_dice(dice);
        copy_dice(dice, dice_copy);
        //print_dice(dice_copy);
        rots(dice_copy, i);
        //print_dice(dice_copy);

        *all_flag = *all_flag + check(dice_copy, new_dice);
        //printf("%d\n", check(dice_copy, new_dice));
    }
}


int det_same(int dice[], int new_dice[]){
    int dice_copy[7];

    int all_flag=0;
    rot_check(dice, dice_copy, new_dice, &all_flag);

    move_N(dice);
    rot_check(dice, dice_copy, new_dice, &all_flag);

    move_N(dice);
    rot_check(dice, dice_copy, new_dice, &all_flag);

    move_N(dice);
    rot_check(dice, dice_copy, new_dice, &all_flag);

    move_N(dice);

    move_E(dice);
    rot_check(dice, dice_copy, new_dice, &all_flag);

    move_W(dice);
    move_W(dice);
    rot_check(dice, dice_copy, new_dice, &all_flag);

    if(all_flag > 0){
        return(1);
    }
    else{
        return(0);
    }

}


int main(){
    int n;
    int data[100][7];

    scanf("%d", &n);

    for(int i=0; i<n; i++){
        for(int j=1; j<7; j++){
            scanf("%d", &data[i][j]);
        }
    }

    int flag = 0;
    int dice[7], new_dice[7];
    for(int i=0; i<n; i++){
        for(int k=0; k<7; k++){
                dice[k] = data[i][k];
//                printf("%d %d %d\n", k, dice[k], data[i][k]);
        }
        for(int j=i+1; j<n; j++){
            for(int k=0; k<7; k++){
                new_dice[k] = data[j][k];
            }
/*
            for(int k=1; k<7; k++){
                printf("%d ", dice[k]);
            }
            printf("\n");

            for(int k=1; k<7; k++){
                printf("%d ", new_dice[k]);
            }
            printf("\n");
*/
            flag += det_same(dice, new_dice);
//            printf("flag:%d\n", flag);

        }
    }

    if(flag > 0){
        printf("No\n");
    }
    else{
        printf("Yes\n");
    }

}


Measured memory_bytes: 2092