#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
const int N = 111 + 10, V = N * 4;

int n;
struct Point {
	int _x1, _y1, id1, _x2, _y2, id2;
} a[N]; 
int idx = 0;
vector<int> pts[N][N];

vector<int> e[V];
void addedge(int u, int v) {
	e[u].push_back(v);
}

int dfn[V], low[V], cur = 0;
int stk[V], tp = 0;
bool instk[V];

int scc_cnt = 0;
int id[N]; //??scc?? 

void dfs(int x) {
	dfn[x] = low[x] = ++cur;
	stk[++tp] = x;
	instk[x] = true;
	for (auto i: e[x])
		if (!dfn[i]) {
			dfs(i);
			low[x] = min(low[x], low[i]);
		}
		else if (instk[i])
			low[x] = min(low[x], dfn[i]);
	if (dfn[x] == low[x]) {
		scc_cnt++;
		do {
			id[stk[tp]] = scc_cnt;
			instk[stk[tp]] = false;
	 	} while (stk[tp--] != x);
	}
}

void clear() {
	idx = cur = tp = scc_cnt = 0;
	for (int i = 1; i <= n * 4; i++) {
		dfn[i] = low[i] = stk[i] = instk[i] = id[i] = 0;
		e[i].clear();
	}
	for (int i = 1; i <= 100; i++)
		for (int j = 1; j <= 100; j++)
			pts[i][j].clear();
}
void slv() {
	clear();
	cin >> n;
	for (int i = 1; i <= n; i++) {
		cin >> a[i]._x1 >> a[i]._y1 >> a[i]._x2 >> a[i]._y2;
		a[i].id1 = ++idx, a[i].id2 = ++idx;
		pts[a[i]._x1][a[i]._y1].push_back(a[i].id1);
		pts[a[i]._x2][a[i]._y2].push_back(a[i].id2);
	}
	for (int i = 1; i <= n; i++) {
		addedge(a[i].id1, a[i].id2 + n * 2);
		addedge(a[i].id2 + n * 2, a[i].id1);
		addedge(a[i].id2, a[i].id1 + n * 2);
		addedge(a[i].id1 + n * 2, a[i].id2);
	}
	for (int i = 1; i <= 100; i++)
		for (int j = 1; j <= 100; j++) {
			for (int a = 0; a < pts[i][j].size(); a++)
				for (int b = a + 1; b < pts[i][j].size(); b++) {
					addedge(pts[i][j][a], pts[i][j][b] + n * 2);
					addedge(pts[i][j][b], pts[i][j][a] + n * 2);
				}
		}
	for (int i = 1; i <= n * 4; i++)
		if (!dfn[i])
			dfs(i);
	for (int i = 1; i <= n * 2; i++)
		if (id[i] == id[i + n * 2]) {
			puts("NO");
			return ;
		}
	puts("YES");
}

int main() {
//	freopen("match.in", "r", stdin);
//	freopen("match.out", "w", stdout);
	
	int T;
	T = 1;
//	cin >> T;
	while (T--)
		slv();
	return 0;
}