#include <bits/stdc++.h>
long long max(long long a, long long b) { return (a < b) ? b : a; }
long long min(long long a, long long b) { return (a > b) ? b : a; }
using namespace std;
vector<long long> rec[100100][4];
bool solve(map<vector<long long>, long long> dp[4]) {
  if (dp[0].size() <= 3) return 1;
  long long maxs[4];
  map<vector<long long>, long long>::iterator its[4] = {
      dp[0].begin(), dp[1].begin(), dp[2].begin(), dp[3].begin()};
  for (long long i = 0; i < 4; i++) maxs[i] = -LLONG_MAX / 2;
  for (long long i = 0; i < dp[0].size(); i++) {
    if (i != 0) {
      for (long long j = 0; j < 4; j++) {
        if (maxs[j] <= (its[j]->first)[0]) {
          vector<long long> remo;
          for (auto cnt = dp[j].begin(); cnt != its[j]; cnt++)
            remo.push_back((cnt->first)[2]);
          map<vector<long long>, long long> oth[4];
          for (auto&& k : remo) {
            for (long long z = 0; z < 4; z++) {
              dp[z].erase(rec[k][z]);
              oth[z][rec[k][z]] = 1;
            }
          }
          return solve(oth) and solve(dp);
        }
      }
    }
    for (long long j = 0; j < 4; j++)
      maxs[j] = max(maxs[j], (its[j]->first)[1]);
    for (long long j = 0; j < 4; j++) its[j]++;
  }
  return 0;
}
int main() {
  long long n, x1, y1, x2, y2;
  cin >> n;
  for (long long i = 0; i < n; i++) {
    scanf("%lld%lld%lld%lld", &x1, &y1, &x2, &y2);
    for (long long j = 0; j < 4; j++) rec[i][j].resize(3);
    rec[i][0] = {x1, x2, i};
    rec[i][1] = {-x2, -x1, i};
    rec[i][2] = {y1, y2, i};
    rec[i][3] = {-y2, -y1, i};
  }
  map<vector<long long>, long long> dp[4];
  for (long long i = 0; i < n; i++) {
    for (long long j = 0; j < 4; j++) {
      dp[j][rec[i][j]] = 1;
    }
  }
  if (solve(dp))
    cout << "YES";
  else
    cout << "NO";
  cout << endl;
}
