#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:102400000,102400000")
int _, cas;
using namespace std;
const int size = 210000, mod = 1000000, inf = 0x3f3f3f3f;
const long long llmod = 4294967296ll, llinf = 0x3f3f3f3f3f3f3f3fll;
const double pi = acos(-1.0), eps = 1e-8;
int month[2][13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31,
                    0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int nex[2][8] = {-1, 0, 1, 0, -1, 1, 1, -1, 0, 1, 0, -1, 1, 1, -1, -1};
template <class T>
inline void inc(T& a, T b) {
  a = (a + b) % mod;
}
template <class T>
inline T modu(T a) {
  return (a % mod + mod) % mod;
}
template <class T>
inline T modu(T a, T mod) {
  return (a % mod + mod) % mod;
}
template <class T>
inline void crl(T* l, T* r, int step) {
  T tmp = *l;
  for (T* i = l; i < r; i += step) *i = *(i + step);
  *(r - 1) = tmp;
}
template <class T>
inline void crr(T* l, T* r, int step) {
  T tmp = *(r - 1);
  for (T* i = r - 1; i > l; i -= step) *i = *(i - step);
  *l = tmp;
}
bool inline dbeq(double a, double b) { return fabs(a - b) < eps; }
template <class T>
inline void cmin(T& a, T b) {
  a = min(a, b);
}
template <class T>
inline void cmax(T& a, T b) {
  a = max(a, b);
}
int fastMax(int x, int y) { return (((y - x) >> (32 - 1)) & (x ^ y)) ^ y; }
int fastMin(int x, int y) { return (((y - x) >> (32 - 1)) & (x ^ y)) ^ x; }
int dp[3100][3100], row[3100][3100], col[3100][3100];
bool l[3100][3100], b[3100][3100];
pair<int, int> ar[size];
int main() {
  int n, x1, x2, y1, y2;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
    x1++, y1++;
    for (int i = x1; i < x2 + 1; i++)
      for (int j = y1; j < y2 + 1; j++) {
        dp[i][j] = 1;
        if (i == x1) l[i][j] = 1;
        if (j == y1) b[i][j] = 1;
      }
    for (int i = x1; i < x2 + 1; i++) row[i][y2] = 1;
    for (int j = y1; j < y2 + 1; j++) col[x2][j] = 1;
    ar[i] = make_pair(x1, y1);
  }
  for (int i = 1; i < 3100; i++)
    for (int j = 1; j < 3100; j++) {
      dp[i][j] += dp[i - 1][j] + dp[i][j - 1] - dp[i - 1][j - 1];
      if (row[i][j]) row[i][j] += row[i - 1][j];
      if (col[i][j]) col[i][j] += col[i][j - 1];
    }
  for (int i = 0; i < n; i++) {
    int x0 = ar[i].first, y0 = ar[i].second;
    int x = x0, y = y0, t = 1;
    while (1) {
      if (x > 3000 || y > 3000) break;
      if (dp[x][y] - dp[x][y0 - 1] - dp[x0 - 1][y] + dp[x0 - 1][y0 - 1] !=
          ((t) * (t)))
        break;
      if (!l[x0][y] || !b[x][y0]) break;
      if (row[x][y] - row[x0 - 1][y] == t && col[x][y] - col[x][y0 - 1] == t) {
        int num = 0;
        for (int j = 0; j < n; j++)
          if (ar[j].first >= x0 && ar[j].first <= x && ar[j].second >= y0 &&
              ar[j].second <= y)
            num++;
        printf("YES %d\n", num);
        for (int j = 0; j < n; j++)
          if (ar[j].first >= x0 && ar[j].first <= x && ar[j].second >= y0 &&
              ar[j].second <= y)
            printf("%d ", j + 1);
        puts("");
        return 0;
      }
      x++, y++, t++;
    }
  }
  puts("NO");
  return 0;
}
