#include <bits/stdc++.h>
using namespace std;
long long rdtsc() {
  long long tmp;
  asm("rdtsc" : "=A"(tmp));
  return tmp;
}
inline int myrand() { return abs((rand() << 15) ^ rand()); }
inline int rnd(int x) { return myrand() % x; }
struct Segment {
  int l, r, id;
  void read(int _id) {
    id = _id;
    assert(scanf("%d%d", &l, &r) == 2);
  }
  inline bool operator<(const Segment &s) const { return r < s.r; }
  inline bool operator&(const Segment &s) const { return l <= s.r && s.l <= r; }
};
const int maxn = 2010;
Segment segms[maxn];
int res[maxn];
int last[maxn];
int cnt[maxn];
int solve(Segment *segms, int n, int g) {
  for (int i = 0; i < n; ++i) last[i] = n - 1;
  for (int i = 0; i < n; ++i) {
    for (int j = 0; j < n; ++j) cnt[j] = 0;
    for (int j = 0; j < n; ++j) ++cnt[last[j]];
    for (int j = 1; j < n; ++j) cnt[j] += cnt[j - 1];
    int first = n - 1;
    for (int j = i; j < n; ++j) {
      int bal = j + 1 - cnt[j] - i;
      if (bal < 0) return 0;
      if (bal == 0 && first == n - 1) first = j;
    }
    int who = -1;
    for (int j = 0; j < n; ++j)
      if (last[j] <= first) {
        who = j;
        break;
      }
    assert(who != -1);
    last[who] = n;
    res[i] = segms[who].id;
    for (int j = 0; j < n; ++j) {
      if (last[j] < n && (segms[j] & segms[who])) last[j] = min(last[j], i + g);
    }
  }
  return 1;
}
bool solve() {
  int n;
  if (scanf("%d", &n) < 1) return 0;
  for (int i = 0; i < n; ++i) {
    segms[i].read(i);
  }
  sort(segms, segms + n);
  int l = 0, r = n - 1;
  while (l + 1 < r) {
    int m = (l + r) / 2;
    if (solve(segms, n, m)) {
      r = m;
    } else {
      l = m;
    }
  }
  solve(segms, n, r);
  for (int i = 0; i < n; ++i) {
    printf("%d%c", res[i] + 1, " \n"[i == n - 1]);
  }
  return 1;
}
int main() {
  srand(rdtsc());
  while (1) {
    if (!solve()) break;
  }
  return 0;
}
