#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f, maxn = 4005;
int n, a[maxn][2], h[maxn], id[maxn][maxn], dp[maxn][maxn], vis[maxn][maxn];
vector<int> g[maxn];
int dfs(int l, int r) {
  if (l >= r) return dp[l][r] = 0;
  if (~dp[l][r]) return dp[l][r];
  dp[l][r] = dfs(l + 1, r);
  for (int i = 0; i < g[l].size(); i++) {
    int j = g[l][i];
    if (a[j][1] < r) {
      if (dp[l][r] < dfs(l, a[j][1]) + dfs(a[j][1], r)) {
        dp[l][r] = dp[l][a[j][1]] + dp[a[j][1]][r];
        vis[l][r] = j;
      }
    }
  }
  return dp[l][r] += (id[l][r] ? 1 : 0);
}
void output(int l, int r) {
  if (l >= r) return;
  if (id[l][r]) printf("%d ", id[l][r]);
  if (vis[l][r]) {
    output(l, a[vis[l][r]][1]);
    output(a[vis[l][r]][1], r);
  } else
    output(l + 1, r);
}
int main() {
  scanf("%d", &n);
  int m;
  for (int i = 1; i <= n; i++) {
    int x, r;
    scanf("%d%d", &x, &r);
    h[m++] = a[i][0] = x - r, h[m++] = a[i][1] = x + r;
  }
  sort(h, h + m);
  m = unique(h, h + m) - h;
  for (int i = 1; i <= n; i++) {
    a[i][0] = lower_bound(h, h + m, a[i][0]) - h + 1;
    a[i][1] = lower_bound(h, h + m, a[i][1]) - h + 1;
    g[a[i][0]].push_back(i);
    id[a[i][0]][a[i][1]] = i;
  }
  memset(dp, -1, sizeof(dp));
  printf("%d\n", dfs(1, m));
  output(1, m);
  return 0;
}
