#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
long long n, n2, x, y, dp[2010], pre[2010], sz[2010];
pair<long long, long long> dat[8010];
vector<pair<pair<long long, long long>, long long> > v, vv;
vector<long long> cont[2010], ubs, ans;
bool cmp(pair<pair<long long, long long>, long long> a,
         pair<pair<long long, long long>, long long> b) {
  return a.first.second - a.first.first < b.first.second - b.first.first;
}
bool cmp2(pair<pair<long long, long long>, long long> a,
          pair<pair<long long, long long>, long long> b) {
  return a.first.second < b.first.second;
}
void upd(long long k, pair<long long, long long> val) {
  dat[k] = val;
  while (k > 0) {
    k = (k - 1) / 2;
    dat[k] = max(dat[k], val);
  }
}
pair<long long, long long> query(long long k, long long lb, long long ub,
                                 long long tlb, long long tub) {
  if (ub < tlb || tub < lb) return make_pair(0, 0);
  if (tlb <= lb && ub <= tub) return dat[k];
  return max(query(k * 2 + 1, lb, (lb + ub) / 2, tlb, tub),
             query(k * 2 + 2, (lb + ub) / 2 + 1, ub, tlb, tub));
}
void Calc(long long i) {
  vv.clear();
  for (int j = 0; j < i; j++)
    if (v[i].first.first <= v[j].first.first &&
        v[j].first.second <= v[i].first.second)
      vv.push_back(v[j]);
  sort(vv.begin(), vv.end(), cmp2);
  ubs.clear();
  for (int j = 0; j < vv.size(); j++) ubs.push_back(vv[j].first.second);
  for (int j = 0; j < 2005; j++) pre[j] = -1;
  n2 = 1;
  while (n2 < vv.size()) n2 *= 2;
  for (int j = 0; j < 8005; j++) dat[j] = make_pair(0, 0);
  long long mx = -1;
  for (int j = 0; j < vv.size(); j++) {
    dp[j] = sz[vv[j].second];
    long long pos = upper_bound(ubs.begin(), ubs.end(), vv[j].first.first) -
                    ubs.begin() - 1;
    if (pos > -1) {
      pair<long long, long long> p = query(0, 0, n2 - 1, 0, pos);
      dp[j] += p.first;
      pre[j] = p.second;
    }
    if (mx == -1 || dp[j] > dp[mx]) mx = j;
    upd(j + n2 - 1, make_pair(dp[j], j));
  }
  while (mx > -1) {
    cont[v[i].second].push_back(vv[mx].second);
    sz[v[i].second] += sz[vv[mx].second];
    mx = pre[mx];
  }
  sz[v[i].second]++;
}
void getans(long long i) {
  for (int j = 0; j < cont[i].size(); j++) {
    getans(cont[i][j]);
    ans.push_back(cont[i][j]);
  }
}
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> x >> y;
    v.push_back(make_pair(make_pair(x - y, x + y), i));
  }
  v.push_back(make_pair(make_pair(-2e9 - 10, 2e9 + 10), n));
  sort(v.begin(), v.end(), cmp);
  for (int i = 0; i < n + 1; i++) Calc(i);
  getans(n);
  sort(ans.begin(), ans.end());
  ans.erase(unique(ans.begin(), ans.end()), ans.end());
  cout << ans.size() << endl;
  for (int i = 0; i < ans.size(); i++) cout << ans[i] + 1 << ' ';
  cout << endl;
  return 0;
}
