#include <bits/stdc++.h>
using namespace std;
int n;
int x[2009], r[2009];
int f[2009][2009];
int ans[2009][2009];
bool vis[2009];
int ST[2009], EN[2009];
int ID[2009];
int F[2009];
int ANS[2009];
struct dat {
  int x, y;
  dat(int x = 0, int y = 0) : x(x), y(y) {}
} p[2009];
bool cmp(dat a, dat b) {
  if (a.x != b.x) return a.x < b.x;
  return a.y < b.y;
}
bool cmp1(int i, int j) {
  dat a = p[i], b = p[j];
  if (a.x != b.x) return a.x < b.x;
  return a.y < b.y;
}
int sto[2009];
vector<int> v[2009];
int tmp[2 * 2009];
int fen[2009][2009 * 2];
int gen[2009][2009 * 2];
void add(int id, int x, int mx, int i) {
  while (x < 2009 * 2) {
    if (fen[id][x] < mx) {
      fen[id][x] = mx;
      gen[id][x] = i;
    }
    x += x & -x;
  }
}
pair<int, int> calc(int id, int x) {
  int rt = 0, i = 0;
  while (x) {
    if (rt < fen[id][x]) {
      rt = fen[id][x];
      i = gen[id][x];
    }
    x -= x & -x;
  }
  return pair<int, int>(rt, i);
}
int dfs(int id) {
  if (!v[id].size()) {
    vis[id] = 1;
    return F[id] = 0;
  }
  if (vis[id]) return F[id];
  ans[id][0] = -1;
  int sz = v[id].size();
  for (int ii = 0; ii < sz; ii++) dfs(v[id][ii]);
  int cnt = 0;
  for (int ii = 0; ii < sz; ii++)
    tmp[cnt++] = p[v[id][ii]].x, tmp[cnt++] = p[v[id][ii]].y;
  sort(tmp, tmp + cnt);
  cnt = unique(tmp, tmp + cnt) - tmp;
  for (int ii = 0; ii < sz; ii++) {
    int i = v[id][ii];
    if (!ii) {
      f[id][ii] = F[i] + 1;
      ans[id][ii] = -1;
    }
    int x = lower_bound(tmp, tmp + cnt, p[i].x) - tmp + 1;
    f[id][ii] = F[i] + 1;
    pair<int, int> tp = calc(id, x);
    if (f[id][ii] < tp.first + F[i] + 1) {
      f[id][ii] = tp.first + F[i] + 1;
      ans[id][ii] = tp.second;
    }
    x = lower_bound(tmp, tmp + cnt, p[i].y) - tmp + 1;
    add(id, x, f[id][ii], ii);
  }
  vis[id] = 1;
  int mx = 0, po = -1;
  for (int i = 0; i < sz; i++) {
    mx = (mx > f[id][i] ? mx : f[id][i]);
    if (mx == f[id][i]) po = i;
  }
  ANS[id] = po;
  return F[id] = mx;
}
int C;
void DFS(int u) {
  int PO = ANS[u];
  while (PO != -1) {
    printf("%d ", ID[v[u][PO]]);
    C++;
    DFS(v[u][PO]);
    PO = ans[u][PO];
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &x[i], &r[i]);
    p[i] = dat(x[i] - r[i], x[i] + r[i]);
    ID[i] = i;
  }
  memset(ans, -1, sizeof(ans));
  memset(ANS, -1, sizeof(ANS));
  sort(ID + 1, ID + n + 1, cmp1);
  sort(p + 1, p + n + 1, cmp);
  for (int i = 1; i <= n; i++) v[0].push_back(i);
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++)
      if (j != i) {
        if (p[j].x >= p[i].x && p[j].y <= p[i].y) {
          v[i].push_back(j);
        }
      }
  }
  dfs(0);
  int ret = F[0];
  printf("%d\n", ret);
  DFS(0);
  return 0;
}
