#include "bits/stdc++.h" using namespace std; #define FOR(i,j,k) for(int (i)=(j);(i)<(int)(k);++(i)) #define rep(i,j) FOR(i,0,j) #define each(x,y) for(auto &(x):(y)) #define mp make_pair #define mt make_tuple #define all(x) (x).begin(),(x).end() #define debug(x) cout<<#x<<": "<<(x)< pii; typedef vector vi; typedef vector vll; struct E { int to, x, y; }; vector G[101]; set fi; vi r0, c0, r1, c1; bool ng; int vis[101]; void f(int u, int p) { vis[u]++; if(ng)return; each(e, G[u]) { int v = e.to, x = e.x, y = e.y, ax = -1, ay = -1; if(v == p)continue; if(vis[v])continue; if(mp(x, y) != mp(r0[v], c0[v]))ax = r0[v], ay = c0[v]; else ax = r1[v], ay = c1[v]; if(!fi.count(mp(x, y))) { fi.insert(mp(x, y)); f(v, u); } else if(!fi.count(mp(ax,ay))) { fi.insert(mp(ax, ay)); f(v, u); } else { ng = true; return; } } } int main(){ ios::sync_with_stdio(false); cin.tie(0); int N; cin >> N; r0 = c0 = r1 = c1 = vi(N); vi X, Y; rep(i, N) { cin >> r0[i] >> c0[i] >> r1[i] >> c1[i]; X.pb(r0[i]); Y.pb(c0[i]); X.pb(r1[i]); Y.pb(c1[i]); } rep(i, N) { auto p = mp(r0[i], c0[i]), q = mp(r1[i], c1[i]); rep(j, N) if(i!=j){ auto r = mp(r0[j], c0[j]), s = mp(r1[j], c1[j]); for(auto pr : {mp(p,r),mp(p,s),mp(q,r),mp(q,s)}) { if(pr.first == pr.second) { G[i].push_back(E{j,pr.first.first,pr.first.second}); break; } } } } rep(i, N) { fi.clear(); ng = false; fi.insert(mp(r0[i], c0[i])); bool ok = false; f(i, -1); ok |= !ng; ng = false; fi.clear(); fi.insert(mp(r1[i], c1[i])); f(i, -1); ok |= !ng; if(!ok) { cout << "NO" << endl; return 0; } } cout << "YES" << endl; }