#include <bits/stdc++.h>
using namespace std;
struct node {
  long long y;
  int i, p;
  int mx, cnt;
  node *l, *r;
};
inline void update(node *a) {
  if (a) {
    a->cnt = 1;
    a->mx = a->p;
    if (a->l) a->cnt += a->l->cnt, a->mx = max(a->mx, a->l->mx);
    if (a->r) a->cnt += a->r->cnt, a->mx = max(a->mx, a->r->mx);
  }
}
void split(node *v, node *&l, node *&r, int x) {
  if (!v) {
    l = r = 0;
    return;
  }
  int i = 0;
  if (v->l) i = v->l->cnt;
  if (i < x) {
    l = v;
    split(v->r, l->r, r, x - i - 1);
  } else {
    r = v;
    split(v->l, l, r->l, x);
  }
  update(l);
  update(r);
}
node *merge(node *a, node *b) {
  void();
  void();
  if (!a) return b;
  if (!b) return a;
  if (a->y > b->y) {
    void();
    a->r = merge(a->r, b);
    update(a);
    return a;
  } else {
    void();
    b->l = merge(a, b->l);
    update(b);
    return b;
  }
}
node a[100010];
node *root = 0;
int n = 0;
node *new_node(int i, int p) {
  a[n].i = i;
  a[n].p = p;
  a[n].y = (((long long)rand()) << 32) + rand();
  a[n].l = a[n].r = 0;
  update(a + n);
  return a + n++;
}
void add(node *v, int i) {
  if (!root) {
    root = v;
    return;
  }
  node *l, *r;
  void();
  split(root, l, r, i);
  void();
  void();
  root = merge(l, merge(v, r));
}
int find_first_avail(node *v, const int &p) {
  if (!v || v->mx < p) return 0;
  if (v->r && v->r->mx > p)
    return find_first_avail(v->r, p) + ((v->l) ? v->l->cnt + 1 : 1);
  if (v->p > p) return ((v->l) ? v->l->cnt + 1 : 1);
  if (v->l && v->l->mx > p) {
    return find_first_avail(v->l, p);
  }
  assert(0);
}
bool getdata() {
  n = 0;
  root = 0;
  int m;
  if (scanf("%d", &m) != 1) return 0;
  for (int i = 0; i < int(m); i++) {
    int nagl, p;
    if (scanf("%d%d", &p, &nagl) != 2) return 0;
    int i1 = find_first_avail(root, p);
    void();
    i1 = max(i1, max(n - nagl, 0));
    node *v = new_node(i, p);
    void();
    add(v, i1);
  }
  return 1;
}
void dfs(node *v) {
  if (!v) return;
  dfs(v->l);
  printf("%d ", v->i + 1);
  dfs(v->r);
}
bool solve() {
  void();
  dfs(root);
  puts("");
  return 1;
}
int main() {
  getdata();
  solve();
  return 0;
}
