#include using namespace std; using ll = int64_t; using ull = uint64_t; using vi = vector; using vc = vector; using vs = vector; using vd = vector; using vll = vector; using vb = vector; using pii = pair; using psi = pair; using pis = pair; using pci = pair; using tiii = tuple; using mii = map; using mis = map; using msi = map; using mci = map; using si = set; using ss = set; using sc = set; using sll = set; using spii = set; using qi = queue; using vvc = vector; using vvi = vector; using vvb = vector; using vvs = vector; using vvll = vector; using vpii = vector; using vpci = vector; using mivi = map; using mivs = map; using misi = map; int main() { int N,count = 0; cin >> N; vi A(N),B(N),result; mii final,ravel; for (int i = 0; i < N; i++) { cin >> A[i] >> B[i]; } //ラベル張り qi B_2; for (int i = 0; i < N; i++) { if (A[i] == 1) { ravel[i + 1] = i; } if (B[i] == 2) { B_2.push(i); } else if (B[i] == 1) { ravel[i] = B_2.front(); B_2.pop(); } } //実行 for (int i = 0; i < N; i++) { if (A[i] == 0 && B[i] == 0) { int now = i; result.push_back(now); while(ravel.count(now)) { int next = ravel.at(now); result.push_back(next); now = next; } } else if (A[i] == 0 && B[i] == 1) { int now = i; result.push_back(now); while(ravel.count(now)) { int next = ravel.at(now); result.push_back(next); now = next; } } } //出力 for (int i = 0; i < N; i++) { cout << result[i] + 1 << endl; } }