#include <bits/stdc++.h>
using namespace std;
int dp[4005][4005], pos[4005][4005], pre[4005][4005];
int x[2005], y[2005], app[4005];
vector<int> vec[4005];
int calc(int l, int r) {
  if (l > r) return 0;
  if (~dp[l][r]) return dp[l][r];
  dp[l][r] = calc(l + 1, r);
  for (auto t : vec[l]) {
    if (y[t] < r && calc(l, y[t]) + calc(y[t], r) > dp[l][r]) {
      dp[l][r] = calc(l, y[t]) + calc(y[t], r);
      pre[l][r] = y[t];
    }
  }
  dp[l][r] += pos[l][r] != 0;
  return dp[l][r];
}
void dfs(int l, int r) {
  if (l > r) return;
  if (pre[l][r]) {
    dfs(l, pre[l][r]);
    dfs(pre[l][r], r);
  } else
    dfs(l + 1, r);
  if (pos[l][r]) printf("%d ", pos[l][r]);
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    int c, ra;
    scanf("%d%d", &c, &ra);
    x[i] = c - ra;
    y[i] = c + ra;
    app[i << 1] = x[i];
    app[i << 1 | 1] = y[i];
  }
  sort(app, app + (n << 1));
  int cnt = unique(app, app + (n << 1)) - app;
  for (int i = 0; i < n; i++) {
    x[i] = lower_bound(app, app + cnt, x[i]) - app;
    y[i] = lower_bound(app, app + cnt, y[i]) - app;
    vec[x[i]].push_back(i);
    pos[x[i]][y[i]] = i + 1;
  }
  memset(dp, -1, sizeof(dp));
  printf("%d\n", calc(0, cnt - 1));
  dfs(0, cnt - 1);
  return 0;
}
