#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
struct Rec {
  pair<int, int> interval[4];
};
Rec recs[111111];
bool check(set<pair<pair<int, int>, int>> st[]) {
  int n = st[0].size();
  if (n == 1) return true;
  set<pair<pair<int, int>, int>>::iterator iter[4];
  for (int i = 0; i < 4; i++) iter[i] = st[i].begin();
  vector<int> mxr(4, -inf);
  for (int i = 0; i < n - 1; i++) {
    for (int j = 0; j < 4; j++) {
      mxr[j] = max(mxr[j], iter[j]->first.second);
      iter[j]++;
      if (iter[j]->first.first >= mxr[j]) {
        set<pair<pair<int, int>, int>> mini[4];
        vector<int> indexs;
        for (auto it = st[j].begin(); it != iter[j]; it++) {
          int index = it->second;
          indexs.push_back(index);
        }
        for (auto index : indexs) {
          for (int z = 0; z < 4; z++) {
            mini[z].insert(make_pair(recs[index].interval[z], index));
            st[z].erase(make_pair(recs[index].interval[z], index));
          }
        }
        if (check(mini) && check(st)) return true;
        return false;
      }
    }
  }
  return false;
}
int main() {
  ios::sync_with_stdio(false);
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    int a, b, c, d;
    cin >> a >> b >> c >> d;
    recs[i].interval[0] = make_pair(a, c);
    recs[i].interval[1] = make_pair(b, d);
    recs[i].interval[2] = make_pair(-c, -a);
    recs[i].interval[3] = make_pair(-d, -b);
  }
  set<pair<pair<int, int>, int>> st[4];
  for (int i = 0; i < 4; i++)
    for (int j = 0; j < n; j++) st[i].insert(make_pair(recs[j].interval[i], j));
  puts(check(st) ? "YES" : "NO");
  return 0;
}
