#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; }