#include <bits/stdc++.h>
using namespace std;
int n;
int w[4005];
int pl;
int sz;
int x[2005], y[2005];
vector<int> bel[4005];
int has[4005][4005];
int dp[4005][4005];
int pre[4005][4005];
int getans(int left, int right) {
  if (left > right) {
    return 0;
  }
  if (dp[left][right] != -1) {
    return dp[left][right];
  }
  dp[left][right] = getans(left + 1, right);
  for (int i = 0; i < bel[left].size(); i++) {
    if (bel[left][i] < right &&
        getans(left, bel[left][i]) + getans(bel[left][i], right) >
            dp[left][right]) {
      dp[left][right] = dp[left][bel[left][i]] + dp[bel[left][i]][right];
      pre[left][right] = bel[left][i];
    }
  }
  if (has[left][right]) {
    dp[left][right]++;
  }
  return dp[left][right];
}
void print(int x, int y) {
  if (x > y) {
    return;
  }
  if (pre[x][y]) {
    print(x, pre[x][y]);
    print(pre[x][y], y);
  } else {
    print(x + 1, y);
  }
  if (has[x][y]) {
    cout << has[x][y] << " ";
  }
}
int main() {
  pl = -1;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    int t1, t2;
    cin >> t1 >> t2;
    pl++;
    w[pl] = x[i] = t1 - t2;
    ;
    pl++;
    w[pl] = y[i] = t1 + t2;
  }
  sort(w, w + 2 * n);
  sz = unique(w, w + 2 * n) - w;
  for (int i = 1; i <= n; i++) {
    x[i] = upper_bound(w, w + sz, x[i]) - w;
    y[i] = upper_bound(w, w + sz, y[i]) - w;
    bel[x[i]].push_back(y[i]);
    has[x[i]][y[i]] = i;
  }
  memset(dp, -1, sizeof(dp));
  int ans = getans(1, sz);
  cout << ans << endl;
  print(1, sz);
  return 0;
}
