#include <bits/stdc++.h>
using namespace std;
const int N = 2005;
int n, m;
int low[N], high[N];
int id[2 * N][2 * N];
vector<int> v[2 * N];
map<int, int> mp;
int dp[2 * N][2 * N];
vector<int> ansv;
int dfs(int l, int r) {
  int i;
  if (dp[l][r] != -1) return dp[l][r];
  if (l == r) return dp[l][r] = 0;
  int cur = 0;
  if (id[l][r] != -1) cur = 1;
  int ans = cur + dfs(l, r - 1);
  for (int i = 0; i < v[r].size(); i++) {
    int x = low[v[r][i]];
    if (x <= l) continue;
    int tmp = cur + dfs(l, x) + dfs(x, r);
    ans = max(ans, tmp);
  }
  return dp[l][r] = ans;
}
void path(int l, int r) {
  int i;
  if (l == r) return;
  int cur = 0;
  if (id[l][r] != -1) {
    cur = 1;
    ansv.push_back(id[l][r]);
  }
  if (dp[l][r] == cur + dp[l][r - 1]) {
    path(l, r - 1);
    return;
  }
  for (int i = 0; i < v[r].size(); i++) {
    int x = low[v[r][i]];
    if (x <= l) continue;
    if (dp[l][r] == cur + dp[l][x] + dp[x][r]) {
      path(l, x);
      path(x, r);
      return;
    }
  }
}
int main() {
  int i, j, c, r;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> c >> r;
    low[i] = c - r;
    high[i] = c + r;
    mp[low[i]] = mp[high[i]] = 0;
  }
  for (auto itr = mp.begin(); itr != mp.end(); itr++) {
    (itr->second) = m;
    m++;
  }
  for (int i = 0; i < n; i++) {
    low[i] = mp[low[i]];
    high[i] = mp[high[i]];
    v[high[i]].push_back(i);
  }
  for (int i = 0; i < m; i++)
    for (int j = 0; j < m; j++) id[i][j] = -1;
  for (int i = 0; i < n; i++) id[low[i]][high[i]] = i;
  for (int i = 0; i < m; i++)
    for (int j = 0; j < m; j++) dp[i][j] = -1;
  int ans = dfs(0, m - 1);
  cout << ans << endl;
  path(0, m - 1);
  for (int i = 0; i < ansv.size(); i++) cout << ansv[i] + 1 << ' ';
  return 0;
}
