#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define f(i,n) for (int i = 0; i < n; i++)
#define f1(i,n) for (int i = 1; i <= n; i++)
#define s(x) scanf("%d",&x)
#define p(x) printf("%d",x)
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define N 100001
#define lg 20
int lca[N][lg];
vector<int> adj[N];
void dfs(int node)
{
f1(i,lg)
{
if(lca[node][i-1]==-1)
lca[node][i]=-1;
else
lca[node][i]=lca[lca[node][i-1]][i-1];
}
f(i,adj[node].size())
{
//childCall
int j=adj[node][i];
//setChildParent
lca[j][0]=node;
//recursion
dfs(j);
}
}
void delNode(int x)
{
f(i,lg)
lca[x][i]=-1;
}
void addNode(int x,int y)
{
lca[y][0]=x;
f1(i,lg)
{
if(lca[y][i-1]==-1)
lca[y][i]=-1;
else
lca[y][i]=lca[lca[y][i-1]][i-1];
}
}
int getKthNode(int x,int k)
{
f(i,lg)
{
if((1<<i) & k)
{
x=lca[x][i];
if(x==-1)
break;
}
}
return x;
}
void solve()
{
memset(adj,0,sizeof(adj));
memset(lca,-1,sizeof(lca));
int p,root;
s(p);
int x,y;
f(i,p)
{
s(x),s(y);
if(y==0)
root=x;
else
adj[y].pb(x);
}
lca[root][0]=-1;
dfs(root);
int q;
s(q);
int val,k;
while(q--)
{
s(val);
switch(val)
{
case 0:
s(x),s(y);
addNode(x,y);
break;
case 1:
s(x);
delNode(x);
break;
case 2:
s(x),s(k);
int ans=getKthNode(x,k);
if(ans==-1)
printf("0");
else
p(ans);
printf("\n");
break;
}
}
f1(i,N)
adj[i].clear();
}
int main()
{
int t;
s(t);
while(t--)
{
solve();
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBmKGksbikgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiNkZWZpbmUgZjEoaSxuKSBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspCiNkZWZpbmUgcyh4KQlzY2FuZigiJWQiLCZ4KQojZGVmaW5lIHAoeCkJcHJpbnRmKCIlZCIseCkKI2RlZmluZSBJT1MgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwojZGVmaW5lIE4gMTAwMDAxCiNkZWZpbmUgbGcgMjAKCmludCBsY2FbTl1bbGddOwp2ZWN0b3I8aW50PiBhZGpbTl07Cgp2b2lkIGRmcyhpbnQgbm9kZSkKewoJZjEoaSxsZykKCXsKCQlpZihsY2Fbbm9kZV1baS0xXT09LTEpCgkJCWxjYVtub2RlXVtpXT0tMTsKCQllbHNlCgkJCWxjYVtub2RlXVtpXT1sY2FbbGNhW25vZGVdW2ktMV1dW2ktMV07Cgl9CglmKGksYWRqW25vZGVdLnNpemUoKSkKCXsKCQkvL2NoaWxkQ2FsbAoJCWludCBqPWFkaltub2RlXVtpXTsKCQkvL3NldENoaWxkUGFyZW50CgkJbGNhW2pdWzBdPW5vZGU7CgkJLy9yZWN1cnNpb24KCQlkZnMoaik7Cgl9Cn0KCnZvaWQgZGVsTm9kZShpbnQgeCkKewoJZihpLGxnKQoJCWxjYVt4XVtpXT0tMTsKfQoKdm9pZCBhZGROb2RlKGludCB4LGludCB5KQp7CglsY2FbeV1bMF09eDsKCWYxKGksbGcpCgl7CgkJaWYobGNhW3ldW2ktMV09PS0xKQoJCQlsY2FbeV1baV09LTE7CgkJZWxzZQoJCQlsY2FbeV1baV09bGNhW2xjYVt5XVtpLTFdXVtpLTFdOwoJfQp9CgppbnQgZ2V0S3RoTm9kZShpbnQgeCxpbnQgaykKewoJZihpLGxnKQoJewoJCWlmKCgxPDxpKSAmIGspCgkJewoJCQl4PWxjYVt4XVtpXTsKCQkJaWYoeD09LTEpCgkJCQlicmVhazsJCQkKCQl9Cgl9CglyZXR1cm4geDsKfQp2b2lkIHNvbHZlKCkKewoJbWVtc2V0KGFkaiwwLHNpemVvZihhZGopKTsKCW1lbXNldChsY2EsLTEsc2l6ZW9mKGxjYSkpOwoJaW50IHAscm9vdDsKCXMocCk7CglpbnQgeCx5OwoJZihpLHApCgl7CgkJcyh4KSxzKHkpOwoJCWlmKHk9PTApCgkJCXJvb3Q9eDsKCQllbHNlCgkJCWFkalt5XS5wYih4KTsKCX0KCWxjYVtyb290XVswXT0tMTsKCWRmcyhyb290KTsKCWludCBxOwoJcyhxKTsKCWludCB2YWwsazsKCXdoaWxlKHEtLSkKCXsKCQlzKHZhbCk7CgkJc3dpdGNoKHZhbCkKCQl7CgkJCWNhc2UgMDoKCQkJCXMoeCkscyh5KTsKCQkJCWFkZE5vZGUoeCx5KTsKCQkJCWJyZWFrOwoJCQljYXNlIDE6CgkJCQlzKHgpOwoJCQkJZGVsTm9kZSh4KTsKCQkJCWJyZWFrOwoJCQljYXNlIDI6CgkJCQlzKHgpLHMoayk7CgkJCQlpbnQgYW5zPWdldEt0aE5vZGUoeCxrKTsKCQkJCWlmKGFucz09LTEpCgkJCQkJcHJpbnRmKCIwIik7CgkJCQllbHNlCgkJCQkJcChhbnMpOwoJCQkJcHJpbnRmKCJcbiIpOwoJCQkJYnJlYWs7CgkJfQoJfQoJZjEoaSxOKSAKCQlhZGpbaV0uY2xlYXIoKTsKfQppbnQgbWFpbigpCnsKCWludCB0OwoJcyh0KTsKCXdoaWxlKHQtLSkKCXsKCQlzb2x2ZSgpOwoJfQoJcmV0dXJuIDA7Cn0=