#include <bits/stdc++.h>
using namespace std;
const int N = 2000 + 10;
map<int, int> t;
class interval {
 public:
  int x, y, id;
  interval() {}
  void scan(int num) {
    int c, r;
    id = num;
    scanf("%d%d", &c, &r);
    x = c - r;
    y = c + r;
  }
  void print() { printf("%d %d %d\n", x, y, id); }
};
bool operator<(const interval& a, const interval& b) {
  if (a.x != b.x) return a.x < b.x;
  return a.y > b.y;
}
int n;
interval a[N];
int near[N], dp[N][N];
void precalc() {
  int i, j;
  for (j = 0; j < n; j++) {
    for (i = 0; i < n; i++)
      if (a[i].x >= a[j].y) break;
    near[j] = i;
  }
}
vector<int> res;
void get_ans(int i, int j) {
  if (i == n) return;
  if (a[i].x > a[j].y) return;
  if (a[i].y > a[j].y) {
    get_ans(i + 1, j);
    return;
  }
  if (dp[i][j] == dp[i + 1][i] + dp[near[i]][j] + 1) {
    res.push_back(a[i].id);
    get_ans(i + 1, i);
    get_ans(near[i], j);
  } else {
    get_ans(i + 1, j);
  }
}
int main() {
  int i, j;
  scanf("%d", &n);
  for (i = 0; i < n; i++) a[i].scan(i);
  sort(a, a + n);
  precalc();
  for (j = 0; j <= n; j++) dp[n][j] = 0;
  for (i = n - 1; i >= 0; i--)
    for (j = 0; j < n; j++) {
      int& r = dp[i][j];
      r = dp[i + 1][j];
      if (a[i].y <= a[j].y) r = max(r, dp[i + 1][i] + dp[near[i]][j] + 1);
    }
  j = 0;
  for (i = 1; i < n; i++)
    if (a[i].y > a[j].y) j = i;
  get_ans(0, j);
  printf("%d\n", res.size());
  for (i = 0; i < (int)res.size(); i++) printf("%d ", res[i] + 1);
  return 0;
}
