#include <bits/stdc++.h>
using namespace std;
const int maxn = 2 * 1000 + 10;
vector<int> p, ans;
int n, r, c, dp[maxn][2 * maxn], mx, ja, ka, tah[maxn], mxj[maxn][2 * maxn],
    mxjb[maxn][2 * maxn];
pair<pair<int, int>, int> b[maxn];
pair<int, int> par[maxn][2 * maxn][2], cur;
inline bool cmp(const pair<pair<int, int>, int> &aa,
                const pair<pair<int, int>, int> &bb) {
  return aa.first.second < bb.first.second ||
         (aa.first.second == bb.first.second &&
          aa.first.first > bb.first.first);
}
void mans(pair<int, int> &a) {
  ans.push_back(b[a.first].second);
  if (par[a.first][a.second][0].first >= 0 &&
      dp[par[a.first][a.second][0].first][par[a.first][a.second][0].second] > 0)
    mans(par[a.first][a.second][0]);
  if (par[a.first][a.second][1].first >= 0 &&
      dp[par[a.first][a.second][1].first][par[a.first][a.second][1].second] > 0)
    mans(par[a.first][a.second][1]);
}
int main() {
  ios::sync_with_stdio(0);
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> c >> r;
    p.push_back(c - r);
    p.push_back(c + r);
    b[i].first.first = c - r;
    b[i].first.second = c + r;
    b[i].second = i + 1;
  }
  sort(b, b + n, cmp);
  sort(p.begin(), p.end());
  p.resize(unique(p.begin(), p.end()) - p.begin());
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < ((int(p.size()))); j++) mxj[i][j] = mxjb[i][j] = -1;
  }
  for (int i = 0; i < n; i++) tah[i] = b[i].first.second;
  for (int i = 0; i < n; i++) {
    ja = lower_bound(p.begin(), p.end(), b[i].first.first) - p.begin();
    for (int j = ja; j >= 0; j--) {
      dp[i][j] = 1;
      if (i > 0)
        par[i][j][0] = make_pair(mxjb[i - 1][ja], ja);
      else
        par[i][j][0] = make_pair(-1, ja);
      if (i > 0 && mxjb[i - 1][ja] >= 0) dp[i][j] += dp[mxjb[i - 1][ja]][ja];
      ka = upper_bound(tah, tah + n, b[i].first.first) - tah;
      ka--;
      if (ka >= 0)
        par[i][j][1] = make_pair(mxjb[ka][j], j);
      else
        par[i][j][1] = make_pair(-1, j);
      if (ka >= 0 && mxjb[ka][j] >= 0) dp[i][j] += dp[mxjb[ka][j]][j];
      if (dp[i][j] > mx) {
        mx = dp[i][j];
        cur = make_pair(i, j);
      }
      if (i > 0) {
        mxj[i][j] = mxj[i - 1][j];
        mxjb[i][j] = mxjb[i - 1][j];
      }
      if (dp[i][j] >= mxj[i][j]) {
        mxj[i][j] = dp[i][j];
        mxjb[i][j] = i;
      }
    }
    if (i > 0) {
      for (int j = ja + 1; j < ((int(p.size()))); j++) {
        if (p[j] > b[i].first.second) break;
        mxj[i][j] = mxj[i - 1][j];
        mxjb[i][j] = mxjb[i - 1][j];
      }
    }
  }
  cout << mx << endl;
  mans(cur);
  for (int i = 0; i < ((int(ans.size()))); i++) cout << ans[i] << " ";
  return 0;
}
