#include <bits/stdc++.h>
using namespace std;
int t[4001], n, m, q[4001][4001], f[4001][4001], s[4001][4001];
struct data {
  int x, y;
} a[4001];
vector<int> b[4001];
inline int dp(int l, int r) {
  if (l > r) return 0;
  if (f[l][r] >= 0) return f[l][r];
  f[l][r] = dp(l + 1, r);
  for (int i = 0; i < b[l].size(); ++i) {
    int x = b[l][i];
    if (a[x].y < r && dp(l, a[x].y) + dp(a[x].y, r) > f[l][r]) {
      f[l][r] = f[l][a[x].y] + f[a[x].y][r];
      s[l][r] = a[x].y;
    }
  }
  f[l][r] += (q[l][r] > 0) ? 1 : 0;
  return f[l][r];
}
inline void print(int l, int r) {
  if (l > r) return;
  if (s[l][r]) {
    print(l, s[l][r]);
    print(s[l][r], r);
  } else
    print(l + 1, r);
  if (q[l][r]) printf("%d ", q[l][r]);
}
int main() {
  memset(f, -1, sizeof(f));
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    int c, r;
    scanf("%d%d", &c, &r);
    a[i].x = c - r;
    a[i].y = c + r;
    t[i] = a[i].x;
    t[n + i] = a[i].y;
  }
  sort(t, t + (n << 1));
  m = unique(t, t + (n << 1)) - t;
  for (int i = 0; i < n; i++) {
    a[i].x = upper_bound(t, t + m, a[i].x) - t;
    a[i].y = upper_bound(t, t + m, a[i].y) - t;
    b[a[i].x].push_back(i);
    q[a[i].x][a[i].y] = i + 1;
  }
  printf("%d\n", dp(1, m));
  print(1, m);
  return 0;
}
