#include <bits/stdc++.h>
using namespace std;
template <class T>
T read1() {
  T t = 0;
  bool vis = 0;
  char k;
  do (k = getchar()) == '-' && (vis = 1);
  while ('0' > k || k > '9');
  while ('0' <= k && k <= '9')
    t = (t << 3) + (t << 1) + (k ^ '0'), k = getchar();
  return vis ? -t : t;
}
int dp[4001][4001], s, tot, X[4001], W[4001][4001];
pair<int, int> a[2001];
map<int, int> ma;
vector<int> L[4001];
void print(int l, int r) {
  if (l == r) return;
  for (int i = 1; i <= s; ++i)
    if (ma[a[i].first] == l && ma[a[i].second] == r) printf("%d ", i);
  if (W[l][r]) {
    print(l, W[l][r]);
    print(W[l][r], r);
  } else
    print(l, r - 1);
}
int main() {
  s = read1<int>();
  for (int i = 1; i <= s; ++i) {
    int c = read1<int>(), r = read1<int>();
    ma[a[i].first = c - r] = 1;
    ma[a[i].second = c + r] = 1;
  }
  for (auto i = ma.begin(); i != ma.end(); ++i) i->second = ++tot;
  for (int i = 1; i <= s; ++i)
    ++dp[ma[a[i].first]][ma[a[i].second]],
        L[ma[a[i].second]].push_back(ma[a[i].first]);
  for (int i = 1; i <= tot; X[i] = L[i].size(), ++i)
    sort(L[i].begin(), L[i].end());
  for (int i = tot; --i;)
    for (int j = i + 1; j <= tot; ++j) {
      while (X[j] && L[j][X[j] - 1] > i) --X[j];
      int O = dp[i][j];
      dp[i][j] = dp[i][j - 1];
      for (int k = X[j]; k < L[j].size(); ++k)
        if (dp[i][L[j][k]] + dp[L[j][k]][j] > dp[i][j])
          W[i][j] = L[j][k], dp[i][j] = dp[i][L[j][k]] + dp[L[j][k]][j];
      dp[i][j] += O;
    }
  printf("%d\n", dp[1][tot]);
  print(1, tot);
  return 0;
}
