#include <bits/stdc++.h>
using namespace std;
int n, lo[4005], hi[4005], dp[4005][4005], a[4005][4005];
map<int, int> m;
vector<int> v[4005];
int dfs(int x, int y) {
  if (dp[x][y] != -1) return dp[x][y];
  if (x == y) return dp[x][y] = 0;
  int sum = a[x][y] == -1 ? 0 : 1, ans = sum + dfs(x, y - 1);
  for (int i = 0; i < v[y].size(); i++) {
    if (lo[v[y][i]] <= x) continue;
    ans = max(ans, sum + dfs(x, lo[v[y][i]]) + dfs(lo[v[y][i]], y));
  }
  return dp[x][y] = ans;
}
void out(int x, int y) {
  if (x == y) return;
  int sum = a[x][y] == -1 ? 0 : 1;
  if (a[x][y] != -1) cout << a[x][y] + 1 << " ";
  if (dp[x][y] == sum + dp[x][y - 1]) {
    out(x, y - 1);
    return;
  }
  for (int i = 0; i < v[y].size(); i++) {
    if (lo[v[y][i]] <= x) continue;
    if (dp[x][y] == sum + dp[x][lo[v[y][i]]] + dp[lo[v[y][i]]][y]) {
      out(x, lo[v[y][i]]), out(lo[v[y][i]], y);
      return;
    }
  }
}
int main() {
  memset(a, -1, sizeof(a));
  memset(dp, -1, sizeof(dp));
  cin >> n;
  int x, y;
  for (int i = 0; i < n; i++) {
    cin >> x >> y;
    lo[i] = x - y, hi[i] = x + y, m[lo[i]] = m[hi[i]] = 0;
  }
  x = 0;
  for (map<int, int>::iterator i = m.begin(); i != m.end(); i++)
    (*i).second = x++;
  for (int i = 0; i < n; i++)
    lo[i] = m[lo[i]], hi[i] = m[hi[i]], v[hi[i]].push_back(i),
    a[lo[i]][hi[i]] = i;
  cout << dfs(0, x - 1) << endl;
  out(0, x - 1);
  return 0;
}
