#include <bits/stdc++.h>
using namespace std;
using namespace rel_ops;
const double PI = acos((double)-1);
int ts, ts2, ts3, ts4;
int n, m, L[10005], R[10005], f[4005][4005], g[4005];
long long gcd(long long x, long long y) {
  long long t;
  for (; y != 0;) {
    t = x % y;
    x = y;
    y = t;
  }
  return x;
}
map<int, int> Ma;
map<pair<int, int>, int> Hv;
multimap<int, int> Mu;
int dd[4005][4005];
void dvc(int l, int r) {
  if (l > r) return;
  if (Hv.find(make_pair(l, r)) != Hv.end()) printf("%d ", Hv[make_pair(l, r)]);
  if (dd[l][r])
    dvc(l, dd[l][r]), dvc(dd[l][r], r);
  else
    dvc(l + 1, r);
}
int main() {
  int i, j, k, l, t1, t2, t3, t4, t5, t6, t7, t8, t9, t, nw;
  int tt1, tt2, tt3, tt4;
  double u1, u2, u3, u4, u5, u6, u7, u8, u9;
  char c1, c2, c3;
  srand((unsigned)time(0));
  typeof Mu.begin() it = Mu.end(), it2;
  t1 = it->first;
  t1 = it->second;
  t2 = Mu.size();
  cin >> m;
  for (i = 1; i <= m; i++)
    cin >> t1 >> t2, L[i] = t1 - t2, R[i] = t1 + t2,
                     Ma.insert(make_pair(L[i], 0)),
                     Ma.insert(make_pair(R[i], 0));
  t1 = 0;
  for (typeof Ma.begin() it = Ma.begin(); it != Ma.end(); it++) {
    it->second = ++t1;
  }
  n = t1;
  for (i = 1; i <= m; i++)
    L[i] = Ma[L[i]], R[i] = Ma[R[i]], Mu.insert(make_pair(L[i], R[i])),
    Hv.insert(make_pair(make_pair(L[i], R[i]), i));
  t1 = (--Mu.end())->first;
  for (k = 0; k <= n; k++) {
    for (i = 1; i + k <= n; i++) {
      j = i + k;
      f[i][j] = f[i + 1][j];
      int cnt = 0;
      ts = 0;
      for (typeof Mu.begin() it = Mu.find(i); it != Mu.end() && it->first == i;
           it++) {
        ts++;
        if (ts > 1000) ts = 0;
        t1 = it->second;
        if (t1 == j) {
          cnt++;
          continue;
        }
        if (t1 <= j) {
          f[i][j] = max(f[i][j], f[i][t1] + f[t1][j]);
          if (f[i][j] == f[i][t1] + f[t1][j]) dd[i][j] = t1;
        }
      }
      f[i][j] += cnt;
    }
  }
  for (i = 1; i <= n; i++) {
    g[i] = g[i - 1];
    for (j = 1; j < i; j++) g[i] = max(g[i], g[j] + f[j][i]);
  }
  cout << g[n] << endl;
  dvc(1, n);
  return 0;
}
