#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
int n, x, y, dp[4010][4010], num, anum[4010][4010], hv;
int is[4010][4010];
map<int, int> mp, to;
vector<pair<int, int> > v;
vector<int> fs[4010], ans;
int dfs(int lb, int ub) {
  if (lb == ub) return dp[lb][ub] = 0;
  if (dp[lb][ub] != -1) return dp[lb][ub];
  dp[lb][ub] = max(dp[lb][ub], dfs(lb, ub - 1) + is[lb][ub]);
  for (int i = 0; i < fs[ub].size(); i++) {
    if (fs[ub][i] <= lb) continue;
    dp[lb][ub] =
        max(dp[lb][ub], dfs(fs[ub][i], ub) + dfs(lb, fs[ub][i]) + is[lb][ub]);
  }
  return dp[lb][ub];
}
void solves(int lb, int ub) {
  if (lb == ub) return;
  if (is[lb][ub] == 1) ans.push_back(anum[lb][ub]);
  if (dp[lb][ub] == dfs(lb, ub - 1) + is[lb][ub]) {
    solves(lb, ub - 1);
    return;
  }
  for (int i = 0; i < fs[ub].size(); i++) {
    if (fs[ub][i] <= lb) continue;
    if (dfs(fs[ub][i], ub) + dfs(lb, fs[ub][i]) + is[lb][ub] == dp[lb][ub]) {
      solves(fs[ub][i], ub);
      solves(lb, fs[ub][i]);
      return;
    }
  }
}
int main() {
  memset(dp, -1, sizeof(dp));
  cin >> n;
  for (int i = 0; i < n; i++) {
    scanf("%d%d", &x, &y);
    int tmp = y;
    y = x + tmp;
    x -= tmp;
    mp[x] = 0;
    mp[y] = 0;
    v.push_back({x, y});
  }
  for (map<int, int>::iterator it = mp.begin(); it != mp.end(); it++)
    to[it->first] = num++;
  for (int i = 0; i < n; i++) {
    is[to[v[i].first]][to[v[i].second]] = 1;
    anum[to[v[i].first]][to[v[i].second]] = i + 1;
    fs[to[v[i].second]].push_back(to[v[i].first]);
  }
  cout << dfs(0, num - 1) << endl;
  hv = 1;
  solves(0, num - 1);
  sort(ans.begin(), ans.end());
  for (int i = 0; i < ans.size(); i++) cout << ans[i] << ' ';
  cout << endl;
  return 0;
}
