#include <bits/stdc++.h>
const int N = 4040;
int n, m, x[N], y[N], g[N][N], dp[N][N], f[N][N];
std::vector<int> b[N], d;
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]);
}
signed main() {
  scanf("%d", &n);
  for (int i = 1, a, b; i <= n; ++i) {
    scanf("%d %d", &a, &b);
    *(x + i) = a - b, *(y + i) = a + b;
    d.push_back(*(x + i));
    d.push_back(*(y + i));
  }
  std::sort(d.begin(), d.end());
  d.erase(std::unique(d.begin(), d.end()), d.end());
  for (int i = 1; i <= n; ++i)
    *(x + i) = std::lower_bound(d.begin(), d.end(), *(x + i)) - d.begin() + 1;
  for (int i = 1; i <= n; ++i)
    *(y + i) = std::lower_bound(d.begin(), d.end(), *(y + i)) - d.begin() + 1;
  for (int i = 1; i <= n; ++i) g[*(x + i)][*(y + i)] = i;
  for (int i = 1; i <= n; ++i) b[*(x + i)].push_back(*(y + i));
  m = d.size();
  for (int i = m; i >= 1; --i)
    for (int j = i; j <= m; ++j) {
      dp[i][j] = dp[i + 1][j];
      for (int v : b[i]) {
        if (v < j && dp[i][v] + dp[v][j] > dp[i][j]) {
          dp[i][j] = dp[i][v] + dp[v][j];
          f[i][j] = v;
        }
      }
      dp[i][j] += (g[i][j] ? 1 : 0);
    }
  printf("%d\n", dp[1][m]);
  print(1, m);
}
