#include <iostream>
#include <vector>
using namespace std;
#define cpy(a,b) tront[a-1] = temp[b-1]

class dice {
public:
	int tront[6];
	int flag;

	dice() {
		flag = 0;
	}
	void ini() {
		for (int i = 0; i < 6; i++) {
			cin >> tront[i];
		}
	}

	void rotation(char c) {
		int temp[6], i;
		for (i = 0; i < 6; i++)
			temp[i] = tront[i];
		switch (c) {
		case 'E':
			cpy(1, 4);
			cpy(4, 6);
			cpy(6, 3);
			cpy(3, 1);
			break;
		case 'N':
			cpy(5, 1);
			cpy(1, 2);
			cpy(2, 6);
			cpy(6, 5);
			break;
		case 'S':
			cpy(2, 1);
			cpy(1, 5);
			cpy(5, 6);
			cpy(6, 2);
			break;
		case 'W':
			cpy(1, 3);
			cpy(3, 6);
			cpy(6, 4);
			cpy(4, 1);
			break;
		}
	}

	void check(dice d1) {
		for (int j = 0; j < 6; j++) {
			if (d1.tront[j] != tront[j])
				return;
		}
		flag = 1;
	}
};

int main() {
	int i, j, k, q, l, m;
	cin >> q;
	vector<dice> d(q);
	for (i = 0; i < q; i++) {
		d[i].ini();
		for (j = 0; j < 2; j++) {
			d[i].rotation('N');
			d[i].rotation('E');
			d[i].rotation('S');
			for (k = 0; k < 4; k++) {
				d[i].rotation('N');
				for (l = 0; l < 4; l++) {
					d[i].rotation('E');
					for (m = 0; m < q; m++) {
						if (i != m)
							d[i].check(d[m]);
					}
				}
			}
		}
	}
	for (i = 0; i < q && !d[i].flag; i++);
	if (i == q)
		cout << "Yes" << endl;
	else
		cout << "No" << endl;
	return 0;
}