#include <bits/stdc++.h>
using namespace std;
int i, j, k, n, d[2011], r[2011], f[2011], dl[2011], g[2011][2011];
bool used[2011];
bool cmp(int a, int b) {
  return d[a] - r[a] < d[b] - r[b] ||
         (d[a] - r[a] == d[b] - r[b] && d[a] + r[a] > d[b] + r[b]);
}
int quick(int x) {
  if (x > d[dl[n]] - r[dl[n]]) return n + 1;
  int s = 1, e = n, mid;
  while (s != e) {
    mid = (s + e) / 2;
    if (d[dl[mid]] - r[dl[mid]] >= x)
      e = mid;
    else
      s = mid + 1;
  }
  return s;
}
void solve(int x) {
  int i, j, k;
  for (i = n; i > x; i--) {
    g[x][i] = g[x][i + 1];
    if (d[dl[i]] + r[dl[i]] <= d[dl[x]] + r[dl[x]]) {
      k = quick(d[dl[i]] + r[dl[i]]);
      g[x][i] = max(g[x][i], g[x][k] + f[i]);
    }
  }
  f[x] = g[x][x + 1] + 1;
}
void calc(int x) {
  used[dl[x]] = true;
  int i, k, now = f[x] - 1;
  for (i = x + 1; now > 0 && i <= n; i++)
    if (d[dl[i]] + r[dl[i]] <= d[dl[x]] + r[dl[x]]) {
      k = quick(d[dl[i]] + r[dl[i]]);
      if (f[i] + g[x][k] == now) {
        now -= f[i];
        calc(i);
        i = k - 1;
      }
    }
}
int main() {
  scanf("%d", &n);
  for (i = 1; i <= n; i++) scanf("%d%d", &d[i], &r[i]), d[i] - r[i], dl[i] = i;
  r[0] = (1 << 30) - 1 + (1 << 30);
  sort(dl + 1, dl + n + 1, cmp);
  for (i = n; i >= 0; i--) solve(i);
  printf("%d\n", f[0] - 1);
  calc(0);
  for (i = 1; i <= n; i++)
    if (used[i]) printf("%d ", i);
  return 0;
}
