#include <bits/stdc++.h>
using namespace std;
int dp[4500];
set<int> es;
map<int, int> em;
int n;
int l[4500], r[4500];
int id[4500];
int f[4500];
int idd[4500];
int bef[4500];
vector<int> plan[4500];
bool cmp(int x, int y) {
  if (r[x] != r[y]) return r[x] < r[y];
  return l[x] > l[y];
}
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++)
    cin >> l[i] >> r[i], l[i] += 10, l[i] = l[i] - r[i],
                                     r[i] = l[i] + r[i] + r[i], es.insert(l[i]),
                                     es.insert(r[i]);
  int tot = 1;
  for (set<int>::iterator it = es.begin(); it != es.end(); it++) {
    em[*it] = ++tot;
  }
  n++;
  l[n] = 1, r[n] = tot;
  id[n] = n;
  for (int i = 1; i < n; i++) l[i] = em[l[i]], r[i] = em[r[i]], id[i] = i;
  sort(id + 1, id + n + 1, cmp);
  for (int ii = 1; ii <= n; ii++) {
    int i = id[ii];
    memset(bef, 0, sizeof(bef));
    for (int j = 1; j <= tot; j++) dp[j] = -1e9;
    dp[l[i] - 1] = 1;
    int ptr = 1;
    for (int j = l[i]; j <= r[i]; j++) {
      dp[j] = dp[j - 1];
      dp[l[i] - 1] = -1e9;
      while (ptr <= n and r[id[ptr]] <= j) {
        int c = id[ptr];
        if (r[c] < j) {
          ptr++;
          continue;
        }
        dp[r[c]] = max(dp[r[c]], dp[l[c]] + f[c]);
        if (dp[r[c]] == dp[l[c]] + f[c]) bef[r[c]] = c;
        ptr++;
      }
    }
    f[i] = dp[r[i]];
    int pos = r[i];
    while (pos > l[i]) {
      if (bef[pos] == 0) {
        pos = pos - 1;
      } else {
        for (int j = 0; j < plan[bef[pos]].size(); j++)
          plan[i].push_back(plan[bef[pos]][j]);
        pos = l[bef[pos]];
      }
    }
    plan[i].push_back(i);
  }
  for (int i = 1; i < n; i++) {
  }
  cout << f[n] - 1 << "\n";
  for (int i = 0; i < plan[n].size(); i++) {
    if (plan[n][i] != n) printf("%d ", plan[n][i]);
  }
  return 0;
}
