#include <bits/stdc++.h>
using namespace std;
const int MOD = (int)1e9 + 7;
const int MAXN = (int)4007;
const int infint = (long long)1e9;
const long long inf = (long long)1e18;
vector<int> v[MAXN];
set<int> S;
unordered_map<int, int> hsh;
int n, cnt = 0, l[MAXN], r[MAXN], dp[MAXN][MAXN], par[MAXN][MAXN],
       oc[MAXN][MAXN], center, radi;
inline void dfs_print(int l, int r) {
  if (dp[l][r] == 0) return;
  if (oc[l][r]) cout << oc[l][r] << " ";
  if (par[l][r] == -1) {
    dfs_print(l, r - 1);
    return;
  } else {
    dfs_print(l, par[l][r]);
    dfs_print(par[l][r], r);
  }
  return;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> center >> radi;
    l[i] = center - radi;
    r[i] = center + radi;
    S.insert(l[i]);
    S.insert(r[i]);
  }
  for (auto u : S) hsh[u] = cnt++;
  for (int i = 0; i < n; i++) {
    l[i] = hsh[l[i]];
    r[i] = hsh[r[i]];
    oc[l[i]][r[i]] = i + 1;
    v[r[i]].push_back(l[i]);
  }
  for (int i = 0; i < MAXN; i++) memset(par[i], -1, sizeof par[i]);
  for (int i = 0; i < cnt; i++)
    for (int j = i - 1; j >= 0; j--) {
      dp[j][i] = dp[j][i - 1];
      for (auto l : v[i])
        if (l > j && dp[j][i] < dp[j][l] + dp[l][i]) {
          dp[j][i] = dp[j][l] + dp[l][i];
          par[j][i] = l;
        }
      dp[j][i] += (oc[j][i] >= 1);
    }
  cout << dp[0][cnt - 1] << endl;
  dfs_print(0, cnt - 1);
}
