#include <bits/stdc++.h>
struct R {
  long long x1;
  long long x2;
  long long y1;
  long long y2;
};
int main(void) {
  struct R a;
  int key1, key2;
  long long xmin, xmax, ymin, ymax;
  long long Xmin1, Xmax1, Ymin1, Ymax1, Xmin2, Xmax2, Ymin2, Ymax2;
  long long n, b, c, d, e;
  while (scanf("%lld", &n) != EOF) {
    scanf("%lld%lld%lld%lld", &a.x1, &a.y1, &a.x2, &a.y2);
    xmin = a.x1;
    xmax = a.x2;
    ymin = a.y1;
    ymax = a.y2;
    Xmin1 = Xmax1 = Ymin1 = Ymax1 = 0;
    Xmin2 = Xmax2 = Ymin2 = Ymax2 = 0;
    b = a.x1;
    c = a.x2;
    d = a.y1;
    e = a.y2;
    key1 = key2 = 0;
    for (long long i = 2; i <= n; i++) {
      scanf("%lld%lld%lld%lld", &a.x1, &a.y1, &a.x2, &a.y2);
      if (a.x1 > xmax || a.y1 > ymax || a.x2 < xmin || a.y2 < ymin) {
        if (key1 == 0) {
          Xmin2 = b;
          Xmax2 = c;
          Ymin2 = d;
          Ymax2 = e;
          key2++;
        }
        key1++;
      } else {
        b = xmin;
        c = xmax;
        d = ymin;
        e = ymax;
        if (a.x1 > xmin) xmin = a.x1;
        if (a.x2 < xmax) xmax = a.x2;
        if (a.y1 > ymin) ymin = a.y1;
        if (a.y2 < ymax) ymax = a.y2;
      }
      if (i == 2) {
        Xmin1 = a.x1;
        Xmax1 = a.x2;
        Ymin1 = a.y1;
        Ymax1 = a.y2;
      } else {
        if (a.x1 > Xmin1) Xmin1 = a.x1;
        if (a.x2 < Xmax1) Xmax1 = a.x2;
        if (a.y1 > Ymin1) Ymin1 = a.y1;
        if (a.y2 < Ymax1) Ymax1 = a.y2;
      }
      if (key2 == 1) {
        if (a.x1 > Xmin2) Xmin2 = a.x1;
        if (a.x2 < Xmax2) Xmax2 = a.x2;
        if (a.y1 > Ymin2) Ymin2 = a.y1;
        if (a.y2 < Ymax2) Ymax2 = a.y2;
      }
    }
    if (key1 > 1) {
      if (Ymax2 < Ymin2 || Xmax2 < Xmin2)
        printf("%lld %lld\n", Xmin1, Ymin1);
      else
        printf("%lld %lld\n", Xmin2, Ymin2);
    } else
      printf("%lld %lld\n", xmin, ymin);
  }
  return 0;
}
