#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using ld = long double;
using ull = unsigned long long;
using pii = pair<int, int>;
using vpii = vector<pii>;
using unt = unsigned int;
int popc(unt a) { return __builtin_popcount(a); }
int popc(int a) { return __builtin_popcount(a); }
int popc(ll a) { return __builtin_popcountll(a); }
int popc(ull a) { return __builtin_popcountll(a); }
int ctz(unt a) { return __builtin_ctz(a); }
int ctz(int a) { return __builtin_ctz(a); }
int ctz(ll a) { return __builtin_ctzll(a); }
int ctz(ull a) { return __builtin_ctzll(a); }
int clz(unt a) { return __builtin_clz(a); }
int clz(int a) { return __builtin_clz(a); }
int clz(ll a) { return __builtin_clzll(a); }
int clz(ull a) { return __builtin_clzll(a); }
template <class c, class N>
bool mini(c &o, N h) {
  if (o > h) return o = h, 1;
  return 0;
}
template <class c, class N>
bool maxi(c &o, N h) {
  if (o < h) return o = h, 1;
  return 0;
}
template <class c, class d, class e, class f>
auto operator+(pair<c, d> a, pair<e, f> b)
    -> decltype(make_pair(a.first + b.first, a.second + b.second)) {
  return {a.first + b.first, a.second + b.second};
}
template <class c, class d, class e,
          class = typename enable_if<!is_base_of<ios_base, c>::value>::type>
auto operator+(c a, pair<d, e> b)
    -> decltype(make_pair(a + b.first, a + b.second)) {
  return {a + b.first, a + b.second};
}
template <class c, class d, class e>
auto operator+(pair<c, d> a, e b)
    -> decltype(make_pair(a.first + b, a.second + b)) {
  return {a.first + b, a.second + b};
}
template <class c, class d, class e>
void operator+=(pair<c, d> &a, e b) {
  a.first += b;
  a.second += b;
}
template <class c, class d, class e, class f>
void operator+=(pair<c, d> &a, pair<e, f> b) {
  a.first += b.first;
  a.second += b.second;
}
template <class c, class d, class e, class f>
auto operator-(pair<c, d> a, pair<e, f> b)
    -> decltype(make_pair(a.first - b.first, a.second - b.second)) {
  return {a.first - b.first, a.second - b.second};
}
template <class c, class d, class e,
          class = typename enable_if<!is_base_of<ios_base, c>::value>::type>
auto operator-(c a, pair<d, e> b)
    -> decltype(make_pair(a - b.first, a - b.second)) {
  return {a - b.first, a - b.second};
}
template <class c, class d, class e>
auto operator-(pair<c, d> a, e b)
    -> decltype(make_pair(a.first - b, a.second - b)) {
  return {a.first - b, a.second - b};
}
template <class c, class d, class e>
void operator-=(pair<c, d> &a, e b) {
  a.first -= b;
  a.second -= b;
}
template <class c, class d, class e, class f>
void operator-=(pair<c, d> &a, pair<e, f> b) {
  a.first -= b.first;
  a.second -= b.second;
}
template <class c, class d, class e, class f>
auto operator*(pair<c, d> a, pair<e, f> b)
    -> decltype(make_pair(a.first * b.first, a.second *b.second)) {
  return {a.first * b.first, a.second * b.second};
}
template <class c, class d, class e,
          class = typename enable_if<!is_base_of<ios_base, c>::value>::type>
auto operator*(c a, pair<d, e> b)
    -> decltype(make_pair(a * b.first, a *b.second)) {
  return {a * b.first, a * b.second};
}
template <class c, class d, class e>
auto operator*(pair<c, d> a, e b)
    -> decltype(make_pair(a.first * b, a.second *b)) {
  return {a.first * b, a.second * b};
}
template <class c, class d, class e>
void operator*=(pair<c, d> &a, e b) {
  a.first *= b;
  a.second *= b;
}
template <class c, class d, class e, class f>
void operator*=(pair<c, d> &a, pair<e, f> b) {
  a.first *= b.first;
  a.second *= b.second;
}
template <class c, class d, class e, class f>
auto operator/(pair<c, d> a, pair<e, f> b)
    -> decltype(make_pair(a.first / b.first, a.second / b.second)) {
  return {a.first / b.first, a.second / b.second};
}
template <class c, class d, class e,
          class = typename enable_if<!is_base_of<ios_base, c>::value>::type>
auto operator/(c a, pair<d, e> b)
    -> decltype(make_pair(a / b.first, a / b.second)) {
  return {a / b.first, a / b.second};
}
template <class c, class d, class e>
auto operator/(pair<c, d> a, e b)
    -> decltype(make_pair(a.first / b, a.second / b)) {
  return {a.first / b, a.second / b};
}
template <class c, class d, class e>
void operator/=(pair<c, d> &a, e b) {
  a.first /= b;
  a.second /= b;
}
template <class c, class d, class e, class f>
void operator/=(pair<c, d> &a, pair<e, f> b) {
  a.first /= b.first;
  a.second /= b.second;
}
template <class c, class d, class e, class f>
auto operator%(pair<c, d> a, pair<e, f> b)
    -> decltype(make_pair(a.first % b.first, a.second % b.second)) {
  return {a.first % b.first, a.second % b.second};
}
template <class c, class d, class e,
          class = typename enable_if<!is_base_of<ios_base, c>::value>::type>
auto operator%(c a, pair<d, e> b)
    -> decltype(make_pair(a % b.first, a % b.second)) {
  return {a % b.first, a % b.second};
}
template <class c, class d, class e>
auto operator%(pair<c, d> a, e b)
    -> decltype(make_pair(a.first % b, a.second % b)) {
  return {a.first % b, a.second % b};
}
template <class c, class d, class e>
void operator%=(pair<c, d> &a, e b) {
  a.first %= b;
  a.second %= b;
}
template <class c, class d, class e, class f>
void operator%=(pair<c, d> &a, pair<e, f> b) {
  a.first %= b.first;
  a.second %= b.second;
}
template <class c, class d, class e, class f>
auto operator^(pair<c, d> a, pair<e, f> b)
    -> decltype(make_pair(a.first ^ b.first, a.second ^ b.second)) {
  return {a.first ^ b.first, a.second ^ b.second};
}
template <class c, class d, class e,
          class = typename enable_if<!is_base_of<ios_base, c>::value>::type>
auto operator^(c a, pair<d, e> b)
    -> decltype(make_pair(a ^ b.first, a ^ b.second)) {
  return {a ^ b.first, a ^ b.second};
}
template <class c, class d, class e>
auto operator^(pair<c, d> a, e b)
    -> decltype(make_pair(a.first ^ b, a.second ^ b)) {
  return {a.first ^ b, a.second ^ b};
}
template <class c, class d, class e>
void operator^=(pair<c, d> &a, e b) {
  a.first ^= b;
  a.second ^= b;
}
template <class c, class d, class e, class f>
void operator^=(pair<c, d> &a, pair<e, f> b) {
  a.first ^= b.first;
  a.second ^= b.second;
}
template <class c, class d, class e, class f>
auto operator|(pair<c, d> a, pair<e, f> b)
    -> decltype(make_pair(a.first | b.first, a.second | b.second)) {
  return {a.first | b.first, a.second | b.second};
}
template <class c, class d, class e,
          class = typename enable_if<!is_base_of<ios_base, c>::value>::type>
auto operator|(c a, pair<d, e> b)
    -> decltype(make_pair(a | b.first, a | b.second)) {
  return {a | b.first, a | b.second};
}
template <class c, class d, class e>
auto operator|(pair<c, d> a, e b)
    -> decltype(make_pair(a.first | b, a.second | b)) {
  return {a.first | b, a.second | b};
}
template <class c, class d, class e>
void operator|=(pair<c, d> &a, e b) {
  a.first |= b;
  a.second |= b;
}
template <class c, class d, class e, class f>
void operator|=(pair<c, d> &a, pair<e, f> b) {
  a.first |= b.first;
  a.second |= b.second;
}
template <class c, class d, class e, class f>
auto operator>>(pair<c, d> a, pair<e, f> b)
    -> decltype(make_pair(a.first >> b.first, a.second >> b.second)) {
  return {a.first >> b.first, a.second >> b.second};
}
template <class c, class d, class e,
          class = typename enable_if<!is_base_of<ios_base, c>::value>::type>
auto operator>>(c a, pair<d, e> b)
    -> decltype(make_pair(a >> b.first, a >> b.second)) {
  return {a >> b.first, a >> b.second};
}
template <class c, class d, class e>
auto operator>>(pair<c, d> a, e b)
    -> decltype(make_pair(a.first >> b, a.second >> b)) {
  return {a.first >> b, a.second >> b};
}
template <class c, class d, class e>
void operator>>=(pair<c, d> &a, e b) {
  a.first >>= b;
  a.second >>= b;
}
template <class c, class d, class e, class f>
void operator>>=(pair<c, d> &a, pair<e, f> b) {
  a.first >>= b.first;
  a.second >>= b.second;
}
template <class c, class d, class e, class f>
auto operator<<(pair<c, d> a, pair<e, f> b)
    -> decltype(make_pair(a.first << b.first, a.second << b.second)) {
  return {a.first << b.first, a.second << b.second};
}
template <class c, class d, class e,
          class = typename enable_if<!is_base_of<ios_base, c>::value>::type>
auto operator<<(c a, pair<d, e> b)
    -> decltype(make_pair(a << b.first, a << b.second)) {
  return {a << b.first, a << b.second};
}
template <class c, class d, class e>
auto operator<<(pair<c, d> a, e b)
    -> decltype(make_pair(a.first << b, a.second << b)) {
  return {a.first << b, a.second << b};
}
template <class c, class d, class e>
void operator<<=(pair<c, d> &a, e b) {
  a.first <<= b;
  a.second <<= b;
}
template <class c, class d, class e, class f>
void operator<<=(pair<c, d> &a, pair<e, f> b) {
  a.first <<= b.first;
  a.second <<= b.second;
}
template <class c, class d, class e, class f>
auto operator&(pair<c, d> a, pair<e, f> b)
    -> decltype(make_pair(a.first & b.first, a.second &b.second)) {
  return {a.first & b.first, a.second & b.second};
}
template <class c, class d, class e,
          class = typename enable_if<!is_base_of<ios_base, c>::value>::type>
auto operator&(c a, pair<d, e> b)
    -> decltype(make_pair(a & b.first, a &b.second)) {
  return {a & b.first, a & b.second};
}
template <class c, class d, class e>
auto operator&(pair<c, d> a, e b)
    -> decltype(make_pair(a.first & b, a.second &b)) {
  return {a.first & b, a.second & b};
}
template <class c, class d, class e>
void operator&=(pair<c, d> &a, e b) {
  a.first &= b;
  a.second &= b;
}
template <class c, class d, class e, class f>
void operator&=(pair<c, d> &a, pair<e, f> b) {
  a.first &= b.first;
  a.second &= b.second;
}
template <class c, class d, class e, class f>
auto operator&&(pair<c, d> a, pair<e, f> b)
    -> decltype(make_pair(a.first && b.first, a.second &&b.second)) {
  return {a.first && b.first, a.second && b.second};
}
template <class c, class d, class e,
          class = typename enable_if<!is_base_of<ios_base, c>::value>::type>
auto operator&&(c a, pair<d, e> b)
    -> decltype(make_pair(a && b.first, a &&b.second)) {
  return {a && b.first, a && b.second};
}
template <class c, class d, class e>
auto operator&&(pair<c, d> a, e b)
    -> decltype(make_pair(a.first && b, a.second &&b)) {
  return {a.first && b, a.second && b};
}
template <class c, class d, class e, class f>
auto operator||(pair<c, d> a, pair<e, f> b)
    -> decltype(make_pair(a.first || b.first, a.second || b.second)) {
  return {a.first || b.first, a.second || b.second};
}
template <class c, class d, class e,
          class = typename enable_if<!is_base_of<ios_base, c>::value>::type>
auto operator||(c a, pair<d, e> b)
    -> decltype(make_pair(a || b.first, a || b.second)) {
  return {a || b.first, a || b.second};
}
template <class c, class d, class e>
auto operator||(pair<c, d> a, e b)
    -> decltype(make_pair(a.first || b, a.second || b)) {
  return {a.first || b, a.second || b};
}
template <class c, class d>
auto operator-(pair<c, d> e) -> decltype(make_pair(-e.first, -e.second)) {
  return {-e.first, -e.second};
}
template <class c, class d>
auto operator+(pair<c, d> e) -> decltype(make_pair(+e.first, +e.second)) {
  return {+e.first, +e.second};
}
template <class c, class d>
auto operator~(pair<c, d> e) -> decltype(make_pair(~e.first, ~e.second)) {
  return {~e.first, ~e.second};
}
template <class c, class d>
auto operator!(pair<c, d> e) -> decltype(make_pair(!e.first, !e.second)) {
  return {!e.first, !e.second};
}
ull mix(ull x) {
  x += 0x9e3779b97f4a7c15;
  x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
  x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
  return x ^ (x >> 31);
}
void fre(string c) {
  freopen((c + ".in").c_str(), "r", stdin);
  freopen((c + ".out").c_str(), "w", stdout);
}
const int nax = 1e5 + 44;
pii range[nax][4];
void err() {
  printf("NO\n");
  exit(0);
}
using SET = set<pair<pii, int> >;
const int inf = 1e9 + 44;
void go(SET r[]) {
  ;
  int n = r[0].size();
  for (int i = 0; i < (int)(3); ++i) assert(r[i].size() == r[3].size());
  if (n == 1) return;
  SET::iterator its[4];
  for (int i = 0; i < (int)(4); ++i) its[i] = r[i].begin();
  int maxes[4];
  for (int i = 0; i < (int)(4); ++i) maxes[i] = -inf;
  for (int _ = 0; _ < (int)(n - 1); ++_) {
    for (int i = 0; i < (int)(4); ++i) {
      maxi(maxes[i], its[i]->first.second);
      its[i]++;
      if (its[i]->first.first >= maxes[i]) {
        SET smalls[4];
        vector<int> erased;
        for (auto it = r[i].begin(); it != its[i]; ++it)
          erased.push_back(it->second);
        for (int v : erased) {
          for (int x = 0; x < (int)(4); ++x) {
            r[x].erase({range[v][x], v});
            smalls[x].insert({range[v][x], v});
          }
        }
        go(smalls);
        go(r);
        return;
      }
    }
  }
  err();
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < (int)(n); ++i) {
    int a, b, c, d;
    scanf("%d%d%d%d", &a, &b, &c, &d);
    range[i][0] = {a, c};
    range[i][1] = {-c, -a};
    range[i][2] = {b, d};
    range[i][3] = {-d, -b};
  }
  SET r[4];
  for (int i = 0; i < (int)(n); ++i)
    for (int j = 0; j < (int)(4); ++j) r[j].insert({range[i][j], i});
  go(r);
  printf("YES\n");
}
