#include <bits/stdc++.h>
using namespace std;
struct node {
  int c;
  int r;
} a[2005];
struct Node {
  pair<int, int> val;
  int id;
  friend bool operator<(const Node &a, const Node &b) { return a.val < b.val; }
  friend bool operator==(const Node &a, const Node &b) {
    return a.val == b.val;
  }
};
int n, cnt;
int dp[4005][4005];
int delet[4005][4005];
bool g[4005][4005];
vector<int> le[4005];
map<int, bool> f;
map<int, int> hashh;
set<Node> s;
int dfs(int l, int r) {
  if (l > r) return 0;
  if (dp[l][r] != -1) return dp[l][r];
  dp[l][r] = dfs(l + 1, r);
  delet[l][r] = 0;
  for (int i = 0; i < le[l].size(); i++)
    if (le[l][i] <= r && dp[l][r] < dfs(l, le[l][i]) + dfs(le[l][i], r)) {
      dp[l][r] = dfs(l, le[l][i]) + dfs(le[l][i], r);
      delet[l][r] = le[l][i];
    }
  if (g[l][r]) dp[l][r]++;
  return dp[l][r];
}
void pr(int l, int r) {
  if (l > r) return;
  if (delet[l][r] == 0)
    pr(l + 1, r);
  else {
    pr(l, delet[l][r]);
    pr(delet[l][r], r);
  }
  if (g[l][r]) cout << (*s.find((Node){make_pair(l, r), 0})).id << ' ';
}
int main() {
  memset(dp, -1, sizeof(dp));
  cin >> n;
  for (int i = 1; i <= n; i++) {
    cin >> a[i].c >> a[i].r;
    f[a[i].c - a[i].r] = 1;
    f[a[i].c + a[i].r] = 1;
  }
  for (map<int, bool>::iterator it = f.begin(); it != f.end(); it++)
    hashh[(*it).first] = ++cnt;
  for (int i = 1; i <= n; i++) {
    le[hashh[a[i].c - a[i].r]].push_back(hashh[a[i].c + a[i].r]);
    g[hashh[a[i].c - a[i].r]][hashh[a[i].c + a[i].r]] = 1;
    s.insert(
        (Node){make_pair(hashh[a[i].c - a[i].r], hashh[a[i].c + a[i].r]), i});
  }
  cout << dfs(1, cnt) << endl;
  pr(1, cnt);
  return 0;
}
