#include using namespace std; #define rep(i, n) for (int i = 0; i < (n); i++) using ll = unsigned long long; using Graph = vector>; int main() { int n; cin >> n; vector> waza(n); waza.at(0) = make_pair(0, 0); for (int i = 1; i < n; i++) { int l, a; cin >> l >> a; l--; a--; waza.at(i) = make_pair(l, a); } int Q; cin >> Q; rep(i, Q) { int q, x; cin >> q >> x; x--; if (q == 1) { int ans = 1; set oboe; oboe.insert(0); for (int j = 1; j < n; j++) { if (waza.at(j).first <= x && oboe.count(waza.at(j).second)) { oboe.insert(j); ans++; } } cout << ans << endl; } else if (q == 2) { int ans = -1; set used_x; while (1) { ans = max(waza.at(x).first, ans); x = waza.at(x).second; if (x == 0) { cout << ans + 1 << endl; break; } if (used_x.count(x)) { cout << -1 << endl; break; } used_x.insert(x); } } } }