#include <bits/stdc++.h>
using namespace std;
const int inf = 2000000010;
const int maxn = 10010;
vector<int> from[maxn], ans[maxn];
int res[maxn], data[maxn], x[maxn], y[maxn], f[maxn], pre[maxn], v[maxn];
int xx[maxn], r[maxn], id[maxn];
int n, len;
bool cmp(const int i, const int j) { return data[i] < data[j]; }
bool cmplen(const int i, const int j) {
  return (long long)y[i] - x[i] < (long long)y[j] - x[j];
}
void dp(int rk, int l, int r) {
  for (int i = l; i <= r; i++) f[i] = pre[i] = 0;
  for (int i = l; i <= r; i++) {
    if (f[i] > f[i + 1]) f[i + 1] = f[i], pre[i + 1] = pre[i];
    int n = from[i].size();
    for (int j = 0; j < n; j++) {
      if (from[i][j] != rk)
        if (f[i] + v[from[i][j]] > f[y[from[i][j]]])
          f[y[from[i][j]]] = f[i] + v[from[i][j]],
          pre[y[from[i][j]]] = from[i][j];
    }
  }
  for (int p = r; pre[p]; p = x[pre[p]]) ans[rk].push_back(pre[p]);
  v[rk] += f[r];
}
int main() {
  scanf("%d", &n);
  data[++len] = -inf, data[++len] = inf;
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &xx[i], &r[i]);
    data[++len] = xx[i] - r[i], data[++len] = xx[i] + r[i];
    v[i] = 1;
  }
  for (int i = 1; i <= len; i++) id[i] = i;
  sort(id + 1, id + len + 1, cmp);
  int rank = 0;
  for (int p = 1; p <= len; p++) {
    int i = id[p];
    if (p == 1 || data[id[p]] != data[id[p - 1]]) rank++;
    if (i & 1)
      x[(i - 1) / 2] = rank, from[rank].push_back((i - 1) / 2);
    else
      y[(i - 1) / 2] = rank;
  }
  for (int i = 0; i <= n; i++) id[i] = i;
  sort(id, id + n + 1, cmplen);
  for (int i = 0; i <= n; i++) dp(id[i], x[id[i]], y[id[i]]);
  res[1] = 0;
  int h = 0, t = 1;
  for (; h < t;) {
    int p = res[++h], len = ans[p].size();
    for (int i = 0; i < len; i++) res[++t] = ans[p][i];
  }
  printf("%d\n", t - 1);
  for (int i = 2; i <= t; i++) printf("%d ", res[i]);
  return 0;
}
