#include <bits/stdc++.h>
using namespace std;
struct data {
  int x, l, r;
} a[4005];
int f[4005][4005], d[4005][4005], e[4005][4005], b[4005], n, m;
vector<int> c[4005];
inline int dfs(int l, int r) {
  if (l > r) return 0;
  if (f[l][r] != -1) return f[l][r];
  f[l][r] = dfs(l + 1, r);
  for (int i = 0, j; i < c[l].size(); i++)
    if (a[j = c[l][i]].r < r && dfs(l, a[j].r) + dfs(a[j].r, r) > f[l][r])
      f[l][r] = f[l][a[j].r] + f[a[j].r][r], d[l][r] = j;
  return f[l][r] += (e[l][r] > 0);
}
inline void sc(int l, int r) {
  if (l > r) return;
  if (e[l][r]) printf("%d ", e[l][r]);
  if (d[l][r]) {
    sc(l, a[d[l][r]].r);
    sc(a[d[l][r]].r, r);
  } else
    sc(l + 1, r);
}
int main() {
  memset(f, -1, sizeof f);
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &a[i].x, &a[i].r);
    a[i].l = a[i].x - a[i].r, a[i].r += a[i].x, b[++m] = a[i].l,
    b[++m] = a[i].r;
  }
  sort(b + 1, b + m + 1);
  m = unique(b + 1, b + m + 1) - b - 1;
  for (int i = 1; i <= n; i++) {
    a[i].l = lower_bound(b + 1, b + m + 1, a[i].l) - b;
    a[i].r = lower_bound(b + 1, b + m + 1, a[i].r) - b;
    c[a[i].l].push_back(i);
    e[a[i].l][a[i].r] = i;
  }
  printf("%d\n", dfs(1, m));
  sc(1, m);
  return 0;
}
