N = int(input()) LA = [tuple(map(int,input().split())) for i in range(N-1)] Q = int(input()) qs = [tuple(map(int,input().split())) for i in range(Q)] rs = [[] for _ in range(N)] level = [0]*N for i,(l,a) in enumerate(LA, start=1): rs[a-1].append((i,l)) level[i] = l stack = [0] reached = [0] * N reached[0] = 1 while stack: v = stack.pop() for r,l in rs[v]: level[r] = max(level[r], level[v]) stack.append(r) reached[r] = 1 INF = float('inf') for i in range(N): if reached[i]==0: level[i] = INF s_level = sorted(level) from bisect import bisect ans = [None] * Q for qi,(t,x) in enumerate(qs): if t==1: c = bisect(s_level, x) ans[qi] = c else: ans[qi] = -1 if level[x-1]==INF else level[x-1] print(*ans, sep='\n')