#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100010;
const int MAXM = 3010;
int n;
int xL[MAXN], xR[MAXN], yL[MAXN], yR[MAXN];
int L[MAXM][MAXM], D[MAXM][MAXM], F[MAXM][MAXM];
int id[MAXN];
pair<int, pair<int, int> > s[MAXN * 2];
bool cmp(int a, int b) {
  return yR[a] < yR[b] || yR[a] == yR[b] && xR[a] < xR[b];
}
void prepare() {
  memset(L, 0, sizeof(L));
  int n1 = 0;
  for (int i = 0; i < (n); i++) {
    s[n1++] = make_pair(yL[i], make_pair(xL[i], xR[i]));
    s[n1++] = make_pair(yR[i], make_pair(xL[i], xR[i]));
  }
  sort(s, s + n1);
  n1 = unique(s, s + n1) - s;
  for (int i = 0; i < n1;) {
    int j = i, Y = s[i].first;
    while (j < n1 && s[j].first == Y) ++j;
    int l = s[i].second.first, r = s[i].second.second;
    for (int k = i; k < j; ++k) {
      if (s[k].second.first > r) l = s[k].second.first;
      if (s[k].second.second > r) r = s[k].second.second;
      for (int x = s[k].second.first; x <= s[k].second.second; ++x) {
        L[x][Y] = x - l;
      }
    }
    i = j;
  }
  memset(D, 0, sizeof(D));
  int n2 = 0;
  for (int i = 0; i < (n); i++) {
    s[n2++] = make_pair(xL[i], make_pair(yL[i], yR[i]));
    s[n2++] = make_pair(xR[i], make_pair(yL[i], yR[i]));
  }
  sort(s, s + n2);
  n2 = unique(s, s + n2) - s;
  for (int i = 0; i < n2;) {
    int j = i, X = s[i].first;
    while (j < n2 && s[j].first == X) ++j;
    int l = s[i].second.first, r = s[i].second.second;
    for (int k = i; k < j; ++k) {
      if (s[k].second.first > r) l = s[k].second.first;
      if (s[k].second.second > r) r = s[k].second.second;
      for (int y = s[k].second.first; y <= s[k].second.second; ++y) {
        D[X][y] = y - l;
      }
    }
    i = j;
  }
  memset(F, 0, sizeof(F));
  for (int i = 0; i < (n); i++) id[i] = i;
  sort(id, id + n, cmp);
  for (int i = 0; i < (n); i++) {
    for (int x = xL[id[i]] + 1; x <= xR[id[i]]; ++x) {
      for (int y = yL[id[i]] + 1; y <= yR[id[i]]; ++y) {
        F[x][y] = F[x][y - 1] + 1;
      }
    }
  }
}
int ans[MAXN];
void output(int id, int e) {
  int t = 0;
  for (int i = 0; i < (n); i++) {
    if (xL[i] < xR[id] - e) continue;
    if (xR[i] > xR[id]) continue;
    if (yL[i] < yR[id] - e) continue;
    if (yR[i] > yR[id]) continue;
    ans[t++] = i + 1;
  }
  printf("YES %d\n", t);
  for (int i = 0; i < (t); i++) {
    printf("%d%c", ans[i], i == t - 1 ? '\n' : ' ');
  }
}
void solve() {
  for (int i = 0; i < (n); i++) {
    int x = xR[i], y = yR[i], minE = 10000;
    for (int e = 1; e <= x && e <= y; ++e) {
      minE = min(minE, F[x - e + 1][y]);
      if (minE < e) break;
      if (D[x][y] - D[x][y - e] < e || D[x - e][y] - D[x - e][y - e] < e)
        continue;
      if (L[x][y] - L[x - e][y] < e || L[x][y - e] - L[x - e][y - e] < e)
        continue;
      output(i, e);
      return;
    }
  }
  puts("NO");
}
int main() {
  while (~scanf("%d", &n)) {
    for (int i = 0; i < (n); i++)
      scanf("%d%d%d%d", xL + i, yL + i, xR + i, yR + i);
    prepare();
    solve();
  }
  return 0;
}
