#include <bits/stdc++.h>
using namespace std;
const int M = 4005;
int read() {
  int x = 0, flag = 1;
  char c;
  while ((c = getchar()) < '0' || c > '9')
    if (c == '-') flag = -1;
  while (c >= '0' && c <= '9')
    x = (x << 3) + (x << 1) + (c ^ 48), c = getchar();
  return x * flag;
}
int n, m, x[M], y[M], d[M], dp[M][M], g[M][M], f[M][M];
vector<int> b[M];
void print(int l, int r) {
  if (!dp[l][r] || l > r) return;
  if (f[l][r])
    print(l, f[l][r]), print(f[l][r], r);
  else
    print(l + 1, r);
  if (g[l][r]) printf("%d ", g[l][r]);
}
int main() {
  n = read();
  for (int i = 1; i <= n; i++) {
    int c = read(), r = read();
    x[i] = d[++m] = c - r;
    y[i] = d[++m] = c + r;
  }
  sort(d + 1, d + 1 + m);
  m = unique(d + 1, d + 1 + m) - d - 1;
  for (int i = 1; i <= n; i++) {
    x[i] = lower_bound(d + 1, d + 1 + m, x[i]) - d;
    y[i] = lower_bound(d + 1, d + 1 + m, y[i]) - d;
    b[x[i]].push_back(y[i]);
    g[x[i]][y[i]] = i;
  }
  for (int i = m; i >= 1; i--)
    for (int j = i; j <= m; j++) {
      dp[i][j] = dp[i + 1][j];
      for (int k = 0; k < b[i].size(); k++) {
        int x = b[i][k];
        if (x < j && dp[i][x] + dp[x][j] > dp[i][j]) {
          dp[i][j] = dp[i][x] + dp[x][j];
          f[i][j] = x;
        }
      }
      dp[i][j] += (g[i][j] > 0 ? 1 : 0);
    }
  printf("%d\n", dp[1][m]);
  print(1, m);
}
