#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
int n, x, y, a[2010], b[2010], len = 0, dp[4010][4010];
pair<int, int> fr[4010][4010];
map<int, int> mp, to;
vector<pair<int, int> > begs[4010], ens[4010];
vector<int> ans;
int dfs(int lb, int ub) {
  if (dp[lb][ub] > -1) return dp[lb][ub];
  if (lb >= ub) return dp[lb][ub] = 0;
  int tmp = dfs(lb, ub - 1), tmp2, add = 0, addn = 0;
  dp[lb][ub] = dfs(lb + 1, ub);
  fr[lb][ub].first = -2;
  if (tmp > dp[lb][ub]) {
    dp[lb][ub] = tmp;
    fr[lb][ub].first = -3;
  }
  for (int i = 0; i < ens[lb].size(); i++) {
    if (ens[lb][i].first > ub) continue;
    if (ens[lb][i].first == ub) {
      add = 1;
      addn = ens[lb][i].second;
      continue;
    }
    tmp = dfs(lb, ens[lb][i].first);
    tmp2 = dfs(ens[lb][i].first, ub);
    if (tmp + tmp2 > dp[lb][ub]) {
      dp[lb][ub] = tmp + tmp2;
      fr[lb][ub].first = ens[lb][i].first;
    }
  }
  fr[lb][ub].second = addn;
  dp[lb][ub] += add;
  return dp[lb][ub];
}
void getans(int lb, int ub) {
  if (fr[lb][ub].second > 0) ans.push_back(fr[lb][ub].second);
  if (fr[lb][ub].first == -2)
    getans(lb + 1, ub);
  else if (fr[lb][ub].first == -3)
    getans(lb, ub - 1);
  else if (fr[lb][ub].first > -1) {
    getans(lb, fr[lb][ub].first);
    getans(fr[lb][ub].first, ub);
  }
}
int main() {
  for (int i = 0; i < 4005; i++)
    for (int j = 0; j < 4005; j++) dp[i][j] = fr[i][j].first = -1;
  cin >> n;
  for (int i = 0; i < n; i++) {
    scanf("%d%d", &x, &y);
    a[i] = x - y;
    b[i] = x + y;
    mp[a[i]] = mp[b[i]] = 0;
  }
  for (map<int, int>::iterator it = mp.begin(); it != mp.end(); it++)
    to[it->first] = len++;
  for (int i = 0; i < n; i++) {
    ens[to[a[i]]].push_back({to[b[i]], i + 1});
    begs[to[b[i]]].push_back({to[a[i]], i + 1});
  }
  cout << dfs(0, len - 1) << endl;
  getans(0, len - 1);
  sort(ans.begin(), ans.end());
  for (int i = 0; i < ans.size(); i++) cout << ans[i] << ' ';
  return 0;
}
