#include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace atcoder; typedef long long ll; #define rep(i,n) for (int i = 0; i < int(n);i++) const ll INF = 1LL << 60; int main(){ int n; cin >> n; vector l(n); vector a(n); vector d(n,INF); vector> g(n); d[0] = 0; for (int i = 1; i < n;i++){ cin >> l[i] >> a[i]; g[a[i]-1].push_back(i); } queue q; q.push(0); while(!q.empty()){ auto x = q.front(); //cout << x << endl; q.pop(); for (auto nx:g[x]){ d[nx] = d[x] + max(l[nx]-d[x],0LL); q.push(nx); } } //cout << "ok" << endl; auto d2 = d; sort(d2.begin(),d2.end()); int t; cin >> t; while(t--){ int type,x; cin >> type >> x; if (type == 1){ cout << int(lower_bound(d2.begin(),d2.end(),x+1)-d2.begin()) << endl; } else{ if (d[x-1] == INF){ cout << -1 << endl; } else cout << d[x-1] << endl; } } return 0; }