#include <bits/stdc++.h>
using namespace std;
void ga(int N, int *A) {
  for (int i(0); i < N; i++) scanf("%d", A + i);
}
struct st {
  int a, b, c, d;
  void gt() { scanf("%d%d%d%d", &a, &b, &c, &d); }
  void dd() { printf("[%d][%d] → [%d][%d]\n", a, b, c, d); }
} a;
vector<st> V;
int N;
bool cp(st a, st b) { return a.a < b.a; }
bool cd(st a, st b) { return a.b < b.b; }
bool ok(vector<st> V) {
  if (V.size() < 2u) return 1;
  sort(V.begin(), V.end(), cp);
  vector<st> v;
  int I = -1;
  for (auto &h : V) {
    if (I <= h.a && !v.empty()) {
      if (!ok(v)) return 0;
      v.clear();
    }
    I = max(h.c, I), v.push_back(h);
  }
  if (v.size() ^ V.size()) return ok(v);
  sort(V.begin(), V.end(), cd), I = -1, v.clear();
  for (auto &h : V) {
    if (I <= h.b && !v.empty()) {
      if (!ok(v)) return 0;
      v.clear();
    }
    I = max(h.d, I), v.push_back(h);
  }
  if (v.size() ^ V.size()) return ok(v);
  return 0;
}
int main(void) {
  scanf("%d", &N);
  for (int i(0); i < N; i++) a.gt(), V.push_back(a);
  puts(ok(V) ? "YES" : "NO");
  return 0;
}
