#include <bits/stdc++.h>
using namespace std;
const int INF = 2147483647;
const double PI = 3.141592653589793;
const int N = 2005;
struct event {
  int wsp, ind, czyP;
};
map<int, int> mapa;
int n, i, j, kol[2 * N], waga[N], pop, a, b, w, ktory[2 * N], r[N], akt, first,
    last, l, lzaw[N];
event zd[2 * N];
int res[N], res2[N], lres, lres2;
int zaw[N][N];
bool cmp(int a, int b) {
  return pair<int, pair<int, int> >(zd[a].wsp,
                                    pair<int, int>(zd[a].czyP, r[zd[a].ind])) <
         pair<int, pair<int, int> >(zd[b].wsp,
                                    pair<int, int>(zd[b].czyP, r[zd[b].ind]));
}
int main() {
  scanf("%d", &n);
  for (i = 0; i < n; i++) {
    scanf("%d %d", &a, &b);
    zd[2 * i].wsp = a - b;
    zd[2 * i].czyP = 1;
    zd[2 * i].ind = i;
    kol[2 * i] = 2 * i;
    zd[2 * i + 1].wsp = a + b;
    zd[2 * i + 1].czyP = 0;
    zd[2 * i + 1].ind = i;
    kol[2 * i + 1] = 2 * i + 1;
    r[i] = b;
  }
  sort(kol, kol + 2 * n, cmp);
  for (i = 0; i < 2 * n; i++) ktory[kol[i]] = i;
  mapa.clear();
  for (i = 0; i < 2 * n; i++)
    if (zd[kol[i]].czyP == 0) {
      w = kol[i];
      mapa[zd[w - 1].wsp] = 0;
      pop = 0;
      j = ktory[w - 1];
      while (j > 0 && zd[kol[j - 1]].wsp == zd[w - 1].wsp) j--;
      first = j;
      while (j < 2 * n && zd[kol[j]].wsp <= zd[kol[i]].wsp) {
        last = j;
        if (j != first && zd[kol[j]].wsp > zd[kol[j - 1]].wsp) {
          mapa[zd[kol[j]].wsp] = 0;
          pop = mapa[zd[kol[j - 1]].wsp];
        }
        if (zd[kol[j]].czyP == 0 && zd[kol[j] - 1].wsp >= zd[w - 1].wsp)
          mapa[zd[kol[j]].wsp] =
              max(max(pop, mapa[zd[kol[j]].wsp]),
                  mapa[zd[kol[j] - 1].wsp] + waga[zd[kol[j]].ind]);
        else
          mapa[zd[kol[j]].wsp] = max(mapa[zd[kol[j]].wsp], pop);
        j++;
      }
      akt = mapa[zd[kol[i - 1]].wsp];
      l = zd[kol[last]].wsp;
      lzaw[zd[kol[i]].ind] = 0;
      for (j = last; j >= first; j--)
        if (zd[kol[j]].czyP == 0 && zd[kol[j]].wsp <= l &&
            mapa[zd[kol[j]].wsp] == akt &&
            zd[kol[j] - 1].wsp >= zd[w - 1].wsp &&
            mapa[zd[kol[j] - 1].wsp] == akt - waga[zd[kol[j]].ind]) {
          zaw[zd[kol[i]].ind][lzaw[zd[kol[i]].ind]++] = zd[kol[j]].ind;
          akt -= waga[zd[kol[j]].ind];
          l = zd[kol[j] - 1].wsp;
        }
      waga[zd[kol[i]].ind] = 1 + mapa[zd[kol[i]].wsp];
    }
  mapa.clear();
  pop = 0;
  for (i = 1; i < 2 * n; i++) {
    if (zd[kol[i]].wsp > zd[kol[i - 1]].wsp) {
      mapa[zd[kol[i]].wsp] = 0;
      pop = mapa[zd[kol[i - 1]].wsp];
    }
    if (zd[kol[i]].czyP == 0)
      mapa[zd[kol[i]].wsp] =
          max(max(pop, mapa[zd[kol[i]].wsp]),
              mapa[zd[kol[i] - 1].wsp] + waga[zd[kol[i]].ind]);
    else
      mapa[zd[kol[i]].wsp] = max(mapa[zd[kol[i]].wsp], pop);
  }
  printf("%d\n", mapa[zd[kol[2 * n - 1]].wsp]);
  akt = mapa[zd[kol[2 * n - 1]].wsp];
  l = zd[kol[2 * n - 1]].wsp;
  lres = 0;
  for (i = 2 * n - 1; i >= 0; i--)
    if (zd[kol[i]].czyP == 0 && zd[kol[i]].wsp <= l &&
        mapa[zd[kol[i]].wsp] == akt &&
        mapa[zd[kol[i] - 1].wsp] == akt - waga[zd[kol[i]].ind]) {
      res[lres++] = zd[kol[i]].ind;
      akt -= waga[zd[kol[i]].ind];
      l = zd[kol[i] - 1].wsp;
    }
  lres2 = 0;
  for (i = 0; i < lres; i++)
    if (waga[res[i]] > 1) res2[lres2++] = res[i];
  while (lres2) {
    l = lres;
    for (i = 0; i < lres2; i++)
      for (j = 0; j < lzaw[res2[i]]; j++) res[lres++] = zaw[res2[i]][j];
    lres2 = 0;
    for (i = l; i < lres; i++)
      if (waga[res[i]] > 1) res2[lres2++] = res[i];
  }
  sort(res, res + lres);
  for (i = 0; i < lres; i++) printf("%d ", res[i] + 1);
  printf("\n");
  return 0;
}
