#include <bits/stdc++.h>
using namespace std;
const int Maxn = 4005;
int n, l[Maxn], r[Maxn];
int num[Maxn][Maxn];
int dp[Maxn][Maxn];
int mid[Maxn][Maxn];
vector<int> ids;
vector<int> all[Maxn];
int dfs(int l, int r) {
  if (l > r) return 0;
  if (~dp[l][r]) return dp[l][r];
  int &res = dp[l][r] = dfs(l + 1, r);
  mid[l][r] = -1;
  for (auto &k : all[l]) {
    if (k >= r) continue;
    int p = dfs(l, k) + dfs(k, r);
    if (p > res) mid[l][r] = k, res = p;
  }
  return res += bool(num[l][r]);
}
void get_ans(int l, int r) {
  if (l > r) return;
  if (num[l][r]) printf("%d ", num[l][r]);
  if (!~mid[l][r])
    get_ans(l + 1, r);
  else
    get_ans(l, mid[l][r]), get_ans(mid[l][r], r);
}
int main() {
  memset(dp, -1, sizeof dp);
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) {
    int c, r;
    scanf("%d %d", &c, &r);
    l[i] = c - r, ::r[i] = c + r;
    ids.push_back(l[i]);
    ids.push_back(::r[i]);
  }
  sort(ids.begin(), ids.end());
  ids.erase(unique(ids.begin(), ids.end()), ids.end());
  for (int i = 0; i < n; ++i) {
    int ll = lower_bound(ids.begin(), ids.end(), l[i]) - ids.begin();
    int rr = lower_bound(ids.begin(), ids.end(), r[i]) - ids.begin();
    l[i] = ll, r[i] = rr;
    all[ll].push_back(rr);
    num[ll][rr] = i + 1;
  }
  n = ids.size() - 1;
  printf("%d\n", dfs(0, n));
  get_ans(0, n);
  putchar('\n');
  return 0;
}
