#include <bits/stdc++.h>
using namespace std;
const int maxn = 4e3 + 5;
int n, m, num[maxn], dp[maxn][maxn], u[maxn], v[maxn], vis[maxn][maxn],
    c[maxn][maxn];
vector<int> g[maxn];
int dfs(int l, int r) {
  if (l >= r) return dp[l][r] = 0;
  if (dp[l][r] != -1) return dp[l][r];
  dp[l][r] = dfs(l + 1, r);
  for (int i : g[l]) {
    int t = v[i];
    if (t < r)
      if (dp[l][r] < dfs(l, t) + dfs(t, r))
        dp[l][r] = dp[l][t] + dp[t][r], c[l][r] = i;
  }
  return dp[l][r] += (vis[l][r] > 0);
}
void check(int l, int r) {
  if (l >= r) return;
  if (vis[l][r]) printf("%d ", vis[l][r]);
  if (c[l][r])
    check(l, v[c[l][r]]), check(v[c[l][r]], r);
  else
    check(l + 1, r);
}
int main() {
  scanf("%d", &n);
  for (int i = 1, x, t; i <= n; ++i) {
    scanf("%d%d", &x, &t);
    long long l = x - t, r = x + t;
    num[++m] = l, num[++m] = r;
    u[i] = l;
    v[i] = r;
  }
  sort(num + 1, num + 1 + m);
  int size = unique(num + 1, num + 1 + m) - num - 1;
  for (int i = 1; i <= n; ++i) {
    u[i] = lower_bound(num + 1, num + 1 + size, u[i]) - num;
    v[i] = lower_bound(num + 1, num + 1 + size, v[i]) - num;
    g[u[i]].push_back(i);
    vis[u[i]][v[i]] = i;
  }
  memset(dp, -1, sizeof(dp));
  printf("%d\n", dfs(1, size));
  check(1, size);
}
