#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
int loc[1000000], ans[1000000], size[1000000], queue[1000000];
vector<int> son[1000000], unknown[1000000];
pair<int, int> stack[1000000];
int main() {
int n, root;
scanf("%d", &n);
for (int i = 0; i < n; i ++) loc[i] = ans[i] = -1;
for (int i = 0; i < n; i ++) {
int a, b;
scanf("%d%d", &a, &b);
a --;
b --;
if (a == i) {
root = i;
continue;
}
son[a].push_back(i);
if (b >= 0) {
ans[i] = b;
loc[b] = i;
} else {
unknown[a].push_back(i);
}
}
ans[root] = n - 1;
loc[n-1] = root;
queue[0] = root;
for (int head = 0, tail = 1; head < tail; head ++)
for (int i = 0; i < son[queue[head]].size(); i ++)
queue[tail ++] = son[queue[head]][i];
for (int i = n - 1; i >= 0; i --) {
size[queue[i]] = 1;
for (int j = 0; j < son[queue[i]].size(); j ++)
size[queue[i]] += size[son[queue[i]][j]];
}
int top = 0;
for (int i = 0; i < n; i ++) {
if (loc[i] == -1) {
int x = (top > 0) ? stack[top - 1].second : 0;
stack[top ++] = make_pair(i, x);
continue;
}
int sum = 0;
for (int j = 0; j < unknown[loc[i]].size(); j ++)
sum += size[unknown[loc[i]][j]];
int now = top - 1;
for (int j = sum; j > 0; j --)
stack[now --].second += j;
now = loc[i];
while (unknown[now].size() == 1) {
int x = unknown[now][0];
if (top == 1 || stack[top - 2].second == top - 1) {
ans[x] = stack[-- top].first;
now = x;
} else {
break;
}
}
}
for (int i = 0; i < n; i ++)
printf("%d\n", ans[i] + 1);
return 0;
}
CiNpbmNsdWRlIDxjc3RyaW5nPgojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBsb2NbMTAwMDAwMF0sIGFuc1sxMDAwMDAwXSwgc2l6ZVsxMDAwMDAwXSwgcXVldWVbMTAwMDAwMF07CnZlY3RvcjxpbnQ+IHNvblsxMDAwMDAwXSwgdW5rbm93blsxMDAwMDAwXTsKcGFpcjxpbnQsIGludD4gc3RhY2tbMTAwMDAwMF07CgppbnQgbWFpbigpIHsKCWludCBuLCByb290OwoJc2NhbmYoIiVkIiwgJm4pOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpICsrKSBsb2NbaV0gPSBhbnNbaV0gPSAtMTsKCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSArKykgewoJCWludCBhLCBiOwoJCXNjYW5mKCIlZCVkIiwgJmEsICZiKTsKCQlhIC0tOwoJCWIgLS07CgkJaWYgKGEgPT0gaSkgewoJCQlyb290ID0gaTsKCQkJY29udGludWU7CgkJfQoJCXNvblthXS5wdXNoX2JhY2soaSk7CgkJaWYgKGIgPj0gMCkgewoJCQlhbnNbaV0gPSBiOwoJCQlsb2NbYl0gPSBpOwoJCX0gZWxzZSB7CgkJCXVua25vd25bYV0ucHVzaF9iYWNrKGkpOwoJCX0KCX0KCWFuc1tyb290XSA9IG4gLSAxOwoJbG9jW24tMV0gPSByb290OwoJCglxdWV1ZVswXSA9IHJvb3Q7Cglmb3IgKGludCBoZWFkID0gMCwgdGFpbCA9IDE7IGhlYWQgPCB0YWlsOyBoZWFkICsrKQoJCWZvciAoaW50IGkgPSAwOyBpIDwgc29uW3F1ZXVlW2hlYWRdXS5zaXplKCk7IGkgKyspCgkJCXF1ZXVlW3RhaWwgKytdID0gc29uW3F1ZXVlW2hlYWRdXVtpXTsKCWZvciAoaW50IGkgPSBuIC0gMTsgaSA+PSAwOyBpIC0tKSB7CgkJc2l6ZVtxdWV1ZVtpXV0gPSAxOwoJCWZvciAoaW50IGogPSAwOyBqIDwgc29uW3F1ZXVlW2ldXS5zaXplKCk7IGogKyspCgkJCXNpemVbcXVldWVbaV1dICs9IHNpemVbc29uW3F1ZXVlW2ldXVtqXV07Cgl9CgkKCWludCB0b3AgPSAwOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpICsrKSB7CgkJaWYgKGxvY1tpXSA9PSAtMSkgewoJCQlpbnQgeCA9ICh0b3AgPiAwKSA/IHN0YWNrW3RvcCAtIDFdLnNlY29uZCA6IDA7CgkJCXN0YWNrW3RvcCArK10gPSBtYWtlX3BhaXIoaSwgeCk7CgkJCWNvbnRpbnVlOwoJCX0KCQlpbnQgc3VtID0gMDsKCQlmb3IgKGludCBqID0gMDsgaiA8IHVua25vd25bbG9jW2ldXS5zaXplKCk7IGogKyspCgkJCXN1bSArPSBzaXplW3Vua25vd25bbG9jW2ldXVtqXV07CgkJaW50IG5vdyA9IHRvcCAtIDE7CgkJZm9yIChpbnQgaiA9IHN1bTsgaiA+IDA7IGogLS0pCgkJCXN0YWNrW25vdyAtLV0uc2Vjb25kICs9IGo7CgkJbm93ID0gbG9jW2ldOwoJCXdoaWxlICh1bmtub3duW25vd10uc2l6ZSgpID09IDEpIHsKCQkJaW50IHggPSB1bmtub3duW25vd11bMF07CgkJCWlmICh0b3AgPT0gMSB8fCBzdGFja1t0b3AgLSAyXS5zZWNvbmQgPT0gdG9wIC0gMSkgewoJCQkJYW5zW3hdID0gc3RhY2tbLS0gdG9wXS5maXJzdDsKCQkJCW5vdyA9IHg7CgkJCX0gZWxzZSB7CgkJCQlicmVhazsKCQkJfQoJCX0KCX0KCQoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpICsrKQoJCXByaW50ZigiJWRcbiIsIGFuc1tpXSArIDEpOwoJCglyZXR1cm4gMDsKfQo=