#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int A[N], D[N], SZ[N], C[N][2], n, P, H[N];
void shift(int rt) {
  SZ[rt] = SZ[C[rt][0]] + SZ[C[rt][1]] + 1;
  D[rt] = max(A[rt], max(D[C[rt][0]], D[C[rt][1]]));
}
void rot(int &rt, bool id) {
  int ah = C[rt][id];
  C[rt][id] = C[ah][id ^ 1];
  C[ah][id ^ 1] = rt;
  shift(rt);
  shift(ah);
  rt = ah;
}
void rot2(int &rt, bool id) {
  int ah = C[rt][id];
  shift(rt);
  shift(ah);
}
int insrt(int &rt, int ind, int c, int h = 0) {
  if (!rt) {
    rt = ind;
    return (h);
  }
  if (A[ind] > max(A[rt], D[C[rt][0]]) && c > SZ[C[rt][0]]) {
    int hh = insrt(C[rt][1], ind, c - SZ[C[rt][0]] - 1, h + 1);
    H[C[rt][1]] = max(H[C[rt][1]], hh);
    if (abs(H[C[rt][1]] - H[C[rt][0]]) > 1)
      rot(rt, 1);
    else
      rot2(rt, 1);
    return (hh);
  }
  int hh = insrt(C[rt][0], ind, c, h + 1);
  H[C[rt][0]] = max(H[C[rt][0]], hh);
  if (abs(H[C[rt][0]] - H[C[rt][1]]) > 1)
    rot(rt, 0);
  else
    rot2(rt, 0);
  return (hh);
}
void frn(int ind) {
  if (!ind) return;
  frn(C[ind][1]);
  printf("%d ", ind);
  frn(C[ind][0]);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    int c;
    scanf("%d %d", &A[i], &c);
    insrt(P, i, c);
  }
  frn(P);
}
