#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:64000000")
struct segment {
  int L;
  int R;
  int NUM;
  void read(int NM) {
    NUM = NM;
    int c, r;
    scanf("%d%d", &c, &r);
    L = c - r;
    R = c + r;
  }
  bool operator<(const segment &b) const {
    if (L < b.L) return true;
    if (L > b.L) return false;
    return (R > b.R);
  }
};
int n;
segment a[1 << 11];
int safe[1 << 11];
int flag[1 << 11][1 << 11];
int f[1 << 11][1 << 11];
void init() {
  memset(f, -1, sizeof f);
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) a[i].read(i + 1);
  sort(a, a + n);
  for (int i = 0; i < n; ++i) {
    safe[i] = -1;
    for (int j = i + 1; j < n; ++j) {
      if (a[j].L < a[i].R) continue;
      safe[i] = j;
      break;
    }
  }
}
int rec(int x, int y) {
  if (x >= n) return 0;
  if (f[x][y] != -1) return f[x][y];
  int res = 0;
  flag[x][y] = 0;
  if (y == n || safe[y] == -1 || safe[y] > x + 1) {
    int cur = rec(x + 1, y);
    if (cur > res) {
      res = cur;
      flag[x][y] = 0;
    }
  }
  if (y == n || a[y].R >= a[x].R) {
    int cur = 1;
    if (x + 1 < safe[x] || safe[x] == -1) cur += rec(x + 1, x);
    if (safe[x] != -1) cur += rec(safe[x], y);
    if (res < cur) {
      res = cur;
      flag[x][y] = 1;
    }
  }
  return f[x][y] = res;
}
int was[1 << 11];
pair<int, int> q[1 << 22];
int main() {
  init();
  int m = rec(0, n);
  printf("%d\n", m);
  q[0] = pair<int, int>(0, n);
  int o1 = 0, o2 = 1;
  while (o1 != o2) {
    int x = q[o1].first;
    int y = q[o1].second;
    if (x >= n || f[x][y] == 0) {
      ++o1;
      continue;
    }
    if (flag[x][y]) {
      was[x] = 1;
      if (x + 1 < safe[x] || safe[x] == -1) q[o2++] = pair<int, int>(x + 1, x);
      if (safe[x] != -1) q[o2++] = pair<int, int>(safe[x], y);
    } else {
      if (y == n || safe[y] > x + 1 || safe[y] == -1)
        q[o2++] = pair<int, int>(x + 1, y);
    }
    ++o1;
  }
  for (int i = 0; i < n; ++i)
    if (was[i]) printf("%d ", a[i].NUM);
  return 0;
}
