#include <stdio.h>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

class Dice
{
public:
	int label[6];
	void N();
	void S();
	void W();
	void E();
	void echo();
	int num_adjust1(int n);
	int num_adjust0(int n);
	void adjust1(int n, int index);
	void adjust0(int n, int index);
};

void Dice::N()
{
	int newlabel[6];
	newlabel[0] = label[1];
	newlabel[1] = label[5];
	newlabel[2] = label[2];
	newlabel[3] = label[3];
	newlabel[4] = label[0];
	newlabel[5] = label[4];
	for(int i = 0; i < 6; i++) {
		label[i] = newlabel[i];
	}
}

void Dice::S()
{
	int newlabel[6];
	newlabel[0] = label[4];
	newlabel[1] = label[0];
	newlabel[2] = label[2];
	newlabel[3] = label[3];
	newlabel[4] = label[5];
	newlabel[5] = label[1];
	for(int i = 0; i < 6; i++) {
		label[i] = newlabel[i];
	}
}

void Dice::W()
{
	int newlabel[6];
	newlabel[0] = label[2];
	newlabel[1] = label[1];
	newlabel[2] = label[5];
	newlabel[3] = label[0];
	newlabel[4] = label[4];
	newlabel[5] = label[3];
	for(int i = 0; i < 6; i++) {
		label[i] = newlabel[i];
	}
}

void Dice::E()
{
	int newlabel[6];
	newlabel[0] = label[3];
	newlabel[1] = label[1];
	newlabel[2] = label[0];
	newlabel[3] = label[5];
	newlabel[4] = label[4];
	newlabel[5] = label[2];
	for(int i = 0; i < 6; i++) {
		label[i] = newlabel[i];
	}
}

int Dice::num_adjust1(int n)
{
	int count = 0;
	for(int i = 0; i < 6; i++) {
		if(label[i] == n) count++;
	}
	return count;
}

int Dice::num_adjust0(int n)
{
	int count = 0;
	if(label[0] == n) count++;
	if(label[2] == n) count++;
	if(label[5] == n) count++;
	if(label[3] == n) count++;
	return count;
}

void Dice::adjust1(int n, int index)
{
	int count = 0;
	for(int i = 0; i < 6; i++) {
		if(label[i] == n) {
			count++;
			if(count - 1 == index) {
				if(i == 0) {
					S();
				} else if(i == 1) {
				} else if(i == 2) {
					W();
					S();
				} else if(i == 3) {
					E();
					S();
				} else if(i == 4) {
					S();
					S();
				} else if(i == 5) {
					N();
				}
				return;
			}
		}
	}
}

void Dice::adjust0(int n, int index)
{
	int count = 0;
	int i;
	// 0
	i = 0;
	if(label[i] == n) {
		count++;
		if(count - 1 == index) {
			if(i == 0) {
			} else if(i == 2) {
				W();
			} else if(i == 5) {
				W();
				W();
			} else if(i == 3) {
				E();
			}
			return;
		}
	}

	// 2
	i = 2;
	if(label[i] == n) {
		count++;
		if(count - 1 == index) {
			if(i == 0) {
			} else if(i == 2) {
				W();
			} else if(i == 5) {
				W();
				W();
			} else if(i == 3) {
				E();
			}
			return;
		}
	}

	// 5
	i = 5;
	if(label[i] == n) {
		count++;
		if(count - 1 == index) {
			if(i == 0) {
			} else if(i == 2) {
				W();
			} else if(i == 5) {
				W();
				W();
			} else if(i == 3) {
				E();
			}
			return;
		}
	}

	// 3
	i = 3;
	if(label[i] == n) {
		count++;
		if(count - 1 == index) {
			if(i == 0) {
			} else if(i == 2) {
				W();
			} else if(i == 5) {
				W();
				W();
			} else if(i == 3) {
				E();
			}
			return;
		}
	}

}

void Dice::echo()
{
	printf("%d %d %d %d %d %d\n", label[0], label[1], label[2], label[3], label[4], label[5]);
}

int dice1() {
	Dice d;
	scanf("%d %d %d %d %d %d", &d.label[0], &d.label[1], &d.label[2], &d.label[3], &d.label[4], &d.label[5]);
	string cmd;
	cin >> cmd;
	for(int i = 0; i < cmd.size(); i++) {
		if(cmd[i] == 'N') d.N();
		else if(cmd[i] == 'S') d.S();
		else if(cmd[i] == 'W') d.W();
		else if(cmd[i] == 'E') d.E();
	}
	printf("%d\n", d.label[0]);
	return 0;
}

int dice2() {
	Dice d;
	scanf("%d %d %d %d %d %d", &d.label[0], &d.label[1], &d.label[2], &d.label[3], &d.label[4], &d.label[5]);
	int num_q;
	scanf("%d", &num_q);
	for(int i = 0; i < num_q; i++) {
		int label0, label1;
		scanf("%d %d", &label0, &label1);

		// label1
		if(label1 == d.label[0]) {
			d.S();
		} else if(label1 == d.label[1]) {
		} else if(label1 == d.label[2]) {
			d.W();
			d.S();
		} else if(label1 == d.label[3]) {
			d.E();
			d.S();
		} else if(label1 == d.label[4]) {
			d.S();
			d.S();
		} else if(label1 == d.label[5]) {
			d.N();
		}

		// label0
		if(label0 == d.label[0]) {
		} else if(label0 == d.label[2]) {
			d.W();
		} else if(label0 == d.label[5]) {
			d.W();
			d.W();
		} else if(label0 == d.label[3]) {
			d.E();
		}
		printf("%d\n", d.label[2]);
	}
	return 0;
}

int dice3() {
	Dice d1;
	scanf("%d %d %d %d %d %d", &d1.label[0], &d1.label[1], &d1.label[2], &d1.label[3], &d1.label[4], &d1.label[5]);

	Dice d2;
	scanf("%d %d %d %d %d %d", &d2.label[0], &d2.label[1], &d2.label[2], &d2.label[3], &d2.label[4], &d2.label[5]);

	// label1
	int label1 = d2.label[1];
	if(label1 == d1.label[0]) {
		d1.S();
	} else if(label1 == d1.label[1]) {
	} else if(label1 == d1.label[2]) {
		d1.W();
		d1.S();
	} else if(label1 == d1.label[3]) {
		d1.E();
		d1.S();
	} else if(label1 == d1.label[4]) {
		d1.S();
		d1.S();
	} else if(label1 == d1.label[5]) {
		d1.N();
	} else {
		printf("No\n");
		return 0;
	}

	// label0
	int label0 = d2.label[0];
	if(label0 == d1.label[0]) {
	} else if(label0 == d1.label[1]) {
		printf("No\n");
		return 0;
	} else if(label0 == d1.label[2]) {
		d1.W();
	} else if(label0 == d1.label[5]) {
		d1.W();
		d1.W();
	} else if(label0 == d1.label[4]) {
		printf("No\n");
		return 0;
	} else if(label0 == d1.label[3]) {
		d1.E();
	} else {
		printf("No\n");
		return 0;
	}

	for(int i = 0; i < 6; i++) {
		if(d1.label[i] != d2.label[i]) {
			printf("No\n");
			return 0;
		}
	}
	printf("Yes\n");
	return 0;
}

bool isSameDice(Dice d1, Dice d2)
{
	bool same = true;
	for(int i = 0; i < 6; i++) {
		if(d1.label[i] != d2.label[i]) {
			same = false;
			break;
		}
	}
	if(same) return true;

	int n1 = d1.num_adjust1(d2.label[1]);
	int n0 = d1.num_adjust0(d2.label[0]);
	for(int i1 = 0; i1 < n1; i1++) {
		for(int i0 = 0; i0 < n0; i0++) {
			Dice d1_dup(d1);
			d1_dup.adjust1(d2.label[1], i1);
			d1_dup.adjust0(d2.label[0], i0);
			bool same = true;
			for(int i = 0; i < 6; i++) {
				if(d1_dup.label[i] != d2.label[i]) {
					same = false;
					break;
				}
			}
			if(same) return true;
		}
	}
	return false;
}

bool isSameDiceOld(Dice d1, Dice d2)
{
	// label1
	int label1 = d2.label[1];
	if(label1 == d1.label[0]) {
		d1.S();
	} else if(label1 == d1.label[1]) {
	} else if(label1 == d1.label[2]) {
		d1.W();
		d1.S();
	} else if(label1 == d1.label[3]) {
		d1.E();
		d1.S();
	} else if(label1 == d1.label[4]) {
		d1.S();
		d1.S();
	} else if(label1 == d1.label[5]) {
		d1.N();
	} else {
		return false;
	}

	// label0
	int label0 = d2.label[0];
	if(label0 == d1.label[0]) {
	} else if(label0 == d1.label[1]) {
		return false;
	} else if(label0 == d1.label[2]) {
		d1.W();
	} else if(label0 == d1.label[5]) {
		d1.W();
		d1.W();
	} else if(label0 == d1.label[4]) {
		return false;
	} else if(label0 == d1.label[3]) {
		d1.E();
	} else {
		return false;
	}

	for(int i = 0; i < 6; i++) {
		if(d1.label[i] != d2.label[i]) {
			return false;
		}
	}
	return true;

}

int dice4() {
	int n;
	scanf("%d", &n);
	vector<Dice> d;

	for(int i = 0; i < n; i++) {
		int j = 0;
		int v;
		Dice dice;
		while(1) {
			if(j >= 6) break;
			cin >> v;
			dice.label[j] = v;
			j++;
		}
		d.push_back(dice);
	}
	for(int i = 0; i < n; i++) {
		for(int j = i + 1; j < n; j++) {
			if(isSameDice(d[i], d[j])) {
				printf("No\n");
				return 0;
			}
		}
	}
	printf("Yes\n");

	return 0;
}

int main() {
	return dice4();
}

Measured memory_bytes: 3188