#include <bits/stdc++.h>
using namespace std;
const int maxn = 2001;
int id[maxn * 2][maxn * 2];
int choose[maxn * 2][maxn * 2];
int n, m, c, tot, ans;
int dp[maxn * 2][maxn * 2];
vector<int> v[maxn * 2];
int l[maxn], r[maxn];
map<int, int> lsh;
int dfs(int lb, int rb) {
  if (dp[lb][rb] != -1) return dp[lb][rb];
  if (lb == rb) return dp[lb][rb] = 0;
  int maxi = dfs(lb + 1, rb);
  choose[lb][rb] = 0;
  for (int i = 0; i < v[lb].size(); i++) {
    int tmp = r[v[lb][i]];
    if (tmp >= rb) continue;
    int s = dfs(lb, tmp) + dfs(tmp, rb);
    if (s > maxi) {
      maxi = s;
      choose[lb][rb] = tmp;
    }
  }
  if (id[lb][rb] != 0) maxi++;
  return dp[lb][rb] = maxi;
}
void output(int lb, int rb) {
  if (id[lb][rb] != 0) printf("%d ", id[lb][rb]);
  if (lb == rb) return;
  if (choose[lb][rb] == 0)
    output(lb + 1, rb);
  else
    output(lb, choose[lb][rb]), output(choose[lb][rb], rb);
  return;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &c, &r[i]);
    r[i] += c;
    l[i] = c * 2 - r[i];
    lsh[l[i]] = lsh[r[i]] = 0;
  }
  for (map<int, int>::iterator ii = lsh.begin(); ii != lsh.end(); ii++)
    ii->second = ++tot;
  for (int i = 1; i <= n; i++) l[i] = lsh[l[i]], r[i] = lsh[r[i]];
  for (int i = 1; i <= n; i++) {
    id[l[i]][r[i]] = i;
    v[l[i]].push_back(i);
  }
  memset(dp, -1, sizeof(dp));
  ans = dfs(1, tot);
  printf("%d\n", ans);
  output(1, tot);
  printf("\n");
  return 0;
}
