#include <bits/stdc++.h>
using namespace std;
vector<int> pos;
map<pair<int, int>, vector<int>> ans;
int dp[5000], p[5000];
map<int, int> f[5000];
int DP(int l, int r, int id) {
  for (int i = l; i <= r; i++) dp[i] = 0;
  for (int i = l; i < r; i++) {
    if (dp[i] > dp[i + 1]) dp[i + 1] = dp[i], p[i + 1] = i;
    for (auto it = f[i].begin(); it != f[i].end(); it++)
      if (it->first <= r && dp[i] + it->second > dp[it->first])
        dp[it->first] = dp[i] + it->second, p[it->first] = i;
  }
  int v = r;
  while (dp[v]) {
    int u = p[v];
    auto it = ans.find(make_pair(u, v));
    if (it != ans.end())
      for (auto i : it->second) ans[make_pair(l, r)].push_back(i);
    v = u;
  }
  if (id) ans[make_pair(l, r)].push_back(id);
  return dp[r] + (id > 0);
}
pair<pair<int, int>, int> a[5000];
int n;
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d%d", &a[i].first.second, &a[i].first.first), a[i].second = i + 1;
    pos.push_back(a[i].first.second - a[i].first.first);
    pos.push_back(a[i].first.second + a[i].first.first);
  }
  pos.push_back(2147483647);
  pos.push_back(-2147483647);
  sort(pos.begin(), pos.end());
  pos.erase(unique(pos.begin(), pos.end()), pos.end());
  a[n].first = make_pair(2147483647, 0);
  sort(a, a + n);
  for (int i = 0; i <= n; i++) {
    int l = lower_bound(pos.begin(), pos.end(),
                        a[i].first.second - a[i].first.first) -
            pos.begin(),
        r = lower_bound(pos.begin(), pos.end(),
                        a[i].first.second + a[i].first.first) -
            pos.begin();
    f[l][r] += DP(l, r, a[i].second);
  }
  printf("%d\n", f[0][pos.size() - 1]);
  auto it = ans.find(make_pair(0, pos.size() - 1));
  for (auto i : it->second) printf("%d ", i);
  putchar('\n');
  return 0;
}
