#include <bits/stdc++.h>
using namespace std;
int n;
int l[2020], r[2020];
vector<int> lsh;
vector<int> lft[4040];
vector<int> ans[2020];
bool less2(int a, int b) { return r[a] - l[a] < r[b] - l[b]; }
void Print(int x) {
  if (x != n - 1) printf("%d ", x + 1);
  for (int i = 0; i < ans[x].size(); i++) Print(ans[x][i]);
}
int ord[2020], inside[2020], outside[4040], cycle[4040];
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    int u, v;
    scanf("%d%d", &u, &v);
    l[i] = u - v;
    r[i] = u + v;
    lsh.emplace_back(l[i]);
    lsh.emplace_back(r[i]);
  }
  sort(lsh.begin(), lsh.end());
  for (int i = 0; i < n; i++) {
    l[i] = lower_bound(lsh.begin(), lsh.end(), l[i]) - lsh.begin();
    r[i] = lower_bound(lsh.begin(), lsh.end(), r[i]) - lsh.begin();
  }
  l[n] = 0;
  r[n] = lsh.size();
  n++;
  for (int i = 0; i < n; i++) ord[i] = i;
  sort(ord, ord + n, less2);
  for (int i = 0; i < n; i++) lft[l[i]].emplace_back(i);
  for (int _ = 0; _ < n; _++) {
    int i = ord[_];
    int lp = l[i], rp = r[i];
    for (int j = lp; j <= rp; j++) {
      outside[j] = 0;
      cycle[j] = -1;
    }
    for (int j = lp; j <= rp; j++) {
      for (int k = 0; k < lft[j].size(); k++) {
        int c = lft[j][k];
        if (c == i || r[c] > r[i]) continue;
        if (outside[r[c]] < outside[j] + inside[c]) {
          outside[r[c]] = outside[j] + inside[c];
          cycle[r[c]] = c;
        }
      }
      if (outside[j] > outside[j + 1]) {
        outside[j + 1] = outside[j];
        cycle[j + 1] = -1;
      }
    }
    inside[i] = outside[rp] + 1;
    int pos = rp;
    while (pos > lp) {
      if (cycle[pos] == -1)
        pos--;
      else {
        ans[i].emplace_back(cycle[pos]);
        pos = l[cycle[pos]];
      }
    }
  }
  printf("%d\n", inside[n - 1] - 1);
  Print(n - 1);
  return 0;
}
