#include <bits/stdc++.h>
using namespace std;
int n, l[4010], r[4010], dp[4010][4010];
map<int, int> mp, pm;
vector<int> v[4010];
int cyc[4010][4010];
pair<int, int> pre[4010][4010];
inline int dfs(int l, int r) {
  if (dp[l][r] != -1) return dp[l][r];
  dp[l][r] = 0;
  if (l == r) {
    pre[l][r] = make_pair(-2, -2);
    return dp[l][r];
  }
  int val = cyc[l][r];
  int ans = dfs(l, r - 1);
  pair<int, int> rev;
  rev = make_pair(-1, -1);
  for (int i = 0; i < v[r].size(); i++) {
    int now = v[r][i];
    if (now <= l) continue;
    int value = dfs(l, now) + dfs(now, r);
    if (value > ans) {
      ans = value;
      rev = make_pair(-1, now);
    }
  }
  dp[l][r] = ans + (val > 0);
  pre[l][r] = rev;
  return dp[l][r];
}
inline void print(int l, int r) {
  pair<int, int> t = pre[l][r];
  if (t == make_pair(-2, -2)) return;
  if (t == make_pair(-1, -1)) {
    if (cyc[l][r] > 0) cout << cyc[l][r] << " ";
    print(l, r - 1);
    return;
  } else {
    if (cyc[l][r] > 0) cout << cyc[l][r] << " ";
    print(l, t.second);
    print(t.second, r);
    return;
  }
}
signed main() {
  ios::sync_with_stdio(false);
  cin >> n;
  for (int i = 1; i <= n; i++) {
    int C, R;
    cin >> C >> R;
    l[i] = C - R;
    r[i] = C + R;
    mp[l[i]] = 1;
    mp[r[i]] = 1;
  }
  int cnt = 0;
  for (map<int, int>::iterator it = mp.begin(); it != mp.end(); it++) {
    cnt++;
    pm[it->first] = cnt;
  }
  for (int i = 1; i <= n; i++) {
    l[i] = pm[l[i]];
    r[i] = pm[r[i]];
    cyc[l[i]][r[i]] = i;
  }
  for (int i = 1; i <= n; i++) {
    v[r[i]].push_back(l[i]);
  }
  memset(dp, -1, sizeof(dp));
  cout << dfs(1, cnt) << endl;
  print(1, cnt);
  cout << endl;
  return 0;
}
