#include <bits/stdc++.h>
const int MAXN = 2e3 + 5;
const int inf = 0x3fffffff;
using namespace std;
int l[MAXN], r[MAXN];
int rnk[MAXN * 2], cnt = 0;
map<int, int> id;
int a[MAXN * 2][MAXN * 2];
vector<int> c[MAXN * 2];
int f[MAXN * 2][MAXN * 2], path[MAXN * 2][MAXN * 2];
int gao(int L, int R) {
  if (f[L][R] != -1) return f[L][R];
  if (L == R) return f[L][R] = 0;
  f[L][R] = gao(L + 1, R);
  bool flag = 0;
  for (int i = 0; i < (int)c[L].size(); ++i) {
    int p = c[L][i];
    if (p > R) continue;
    if (p == R) flag = 1;
    if (f[L][R] < gao(L, p) + gao(p, R)) {
      f[L][R] = f[L][p] + f[p][R];
      path[L][R] = p;
    }
  }
  return f[L][R] += flag;
}
inline void print(int L, int R) {
  if (L == R || !L || !R) return;
  if (a[L][R]) printf("%d ", a[L][R]);
  if (path[L][R]) {
    print(L, path[L][R]);
    print(path[L][R], R);
  } else
    print(L + 1, R);
}
int main(void) {
  memset(f, -1, sizeof(f));
  int n;
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    int c, rd;
    scanf("%d%d", &c, &rd);
    rnk[++cnt] = l[i] = c - rd;
    rnk[++cnt] = r[i] = c + rd;
  }
  sort(rnk + 1, rnk + cnt + 1);
  cnt = unique(rnk + 1, rnk + cnt + 1) - rnk - 1;
  for (int i = 1; i <= cnt; ++i) id[rnk[i]] = i;
  for (int i = 1; i <= n; ++i) {
    l[i] = id[l[i]];
    r[i] = id[r[i]];
    c[l[i]].push_back(r[i]);
    a[l[i]][r[i]] = i;
  }
  printf("%d\n", gao(1, cnt));
  print(1, cnt);
  return 0;
}
