#include <bits/stdc++.h>
using namespace std;
int n, np;
int x[2001], y[2001];
int pt[4001], f[4001][4001], g[4001][4001], s[4001][4001];
int gs[4001], wz[4001][2001];
int dfs(int l, int r) {
  int i, j, k;
  if (l > r) return 0;
  if (f[l][r] >= 0) return f[l][r];
  f[l][r] = dfs(l + 1, r);
  for (i = 1; i <= gs[l]; i++)
    if (x[wz[l][i]] == l && y[wz[l][i]] < r &&
        dfs(l, y[wz[l][i]]) + dfs(y[wz[l][i]], r) > f[l][r]) {
      f[l][r] = f[l][y[wz[l][i]]] + f[y[wz[l][i]]][r];
      s[l][r] = y[wz[l][i]];
    }
  if (g[l][r]) f[l][r]++;
  return f[l][r];
}
void dfs2(int l, int r) {
  if (l > r) return;
  if (s[l][r]) {
    dfs2(l, s[l][r]);
    dfs2(s[l][r], r);
  } else
    dfs2(l + 1, r);
  if (g[l][r]) printf("%d ", g[l][r]);
}
int main() {
  int i, j, k;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    int d, r;
    scanf("%d%d", &d, &r);
    x[i] = d - r;
    y[i] = d + r;
    pt[i + i - 1] = d - r;
    pt[i + i] = d + r;
  }
  sort(pt + 1, pt + n + n + 1);
  np = unique(pt + 1, pt + n + n + 1) - pt - 1;
  for (i = 1; i <= n; i++) {
    x[i] = lower_bound(pt + 1, pt + np + 1, x[i]) - pt;
    y[i] = lower_bound(pt + 1, pt + np + 1, y[i]) - pt;
    wz[x[i]][++gs[x[i]]] = i;
    g[x[i]][y[i]] = i;
  }
  memset(f, -1, sizeof(f));
  dfs(1, np);
  printf("%d\n", f[1][np]);
  dfs2(1, np);
  return 0;
}
