#include <bits/stdc++.h>
using namespace std;
pair<int, int> p[4040];
map<int, int> mp;
int n, id[4040], x[4040], y[4040], d[4040 << 1], runs, nx[4040], ny[4040];
int gas[4040], a[4040][4040];
int f[4040][4040], first[4040][4040], add[4040][4040], ans[4040 << 1];
vector<int> v;
bool cmp(int i, int j) { return p[i] < p[j]; }
void calc(int st, int en) {
  if (st >= en) return;
  if (add[st][en]) v.push_back(add[st][en]);
  if (!first[st][en]) {
    calc(st + 1, en);
    return;
  }
  int r = first[st][en];
  v.push_back(r);
  int mid = ny[r];
  st = nx[r];
  if (add[st][en]) v.push_back(add[st][en]);
  calc(st, mid), calc(mid, en);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    int c, r;
    scanf("%d %d", &c, &r);
    p[i].first = c - r, p[i].second = c + r;
    id[i] = i;
  }
  sort(id + 1, id + n + 1, cmp);
  for (int i = 1; i <= n; i++) {
    x[i] = p[id[i]].first, y[i] = p[id[i]].second;
    d[++runs] = x[i], d[++runs] = y[i];
  }
  sort(d + 1, d + runs + 1);
  int m = unique(d + 1, d + runs + 1) - d - 1;
  for (int i = 1; i <= m; i++) mp[d[i]] = i;
  for (int i = 1; i <= n; i++) nx[i] = mp[x[i]], ny[i] = mp[y[i]];
  int j = 1;
  for (int i = 1; i <= m; i++) {
    while (x[j] == d[i]) a[i][gas[i]++] = j, j++;
  }
  for (int L = 1; L < m; L++) {
    for (int i = 1; i <= m - L; i++) {
      int j = i + L;
      f[i][j] = f[i + 1][j];
      for (int k = 0; k < gas[i]; k++) {
        int r = ny[a[i][k]];
        if (r < j) {
          if (f[i][j] < f[i][r] + f[r][j]) {
            f[i][j] = f[i][r] + f[r][j];
            first[i][j] = a[i][k];
          }
        } else {
          if (r == j) f[i][j]++, add[i][j] = a[i][k];
          break;
        }
      }
    }
  }
  printf("%d\n", f[1][m]);
  calc(1, m);
  int cnt = 0;
  for (int i = 0; i < v.size(); i++) ans[cnt++] = v[i];
  sort(ans, ans + cnt);
  cnt = unique(ans, ans + cnt) - ans;
  for (int i = 0; i < cnt; i++) printf("%d ", id[ans[i]]);
  puts("");
  return 0;
}
