1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<cmath>
5 #include<algorithm>
6 #include<queue>
7 #include<stack>
8 #include<deque>
9 #include<map>
10 #include<iostream>
11 using namespace std;
12 typedef long long LL;
13 const double pi=acos(-1.0);
14 const double e=exp(1);
15 const int N = 10100;
16
17 #define lson i << 1,l,m
18 #define rson i << 1 | 1,m + 1,r
19 int cnt,ans;
20 int a,b,n;
21 int root;
22 int head[N];
23 int is_root[N];
24 int father[N];
25 int vis[N];
26
27 struct edge
28 {
29 int to;
30 int next;
31 } edge[N];
32
33 int seek(int ss)
34 {
35 int mid;
36 int head=ss;
37 while(ss!=father[ss])
38 ss=father[ss];
39
40 while(head!=ss)
41 {
42 mid=father[head];
43 father[head]=ss;
44 head=mid;
45 }
46 return ss;
47 }
48
49 void join(int xx,int yy)
50 {
51 int one=seek(xx);
52 int two=seek(yy);
53 if(one!=two)
54 father[two]=one;
55 }
56
57 void add(int x,int y)
58 {
59 edge[cnt].to=y;
60 edge[cnt].next=head[x];
61 head[x]=cnt++;
62 }
63
64 void init()
65 {
66 int i,p,j;
67 int x,y;
68 cnt=0;
69 memset(head,-1,sizeof(head));
70 memset(is_root,0,sizeof(is_root));
71 memset(vis,0,sizeof(vis));
72 scanf("%d",&n);
73 for(i=0; i<=n; i++)
74 father[i]=i;
75 for(i=1; i<n; i++)
76 {
77 scanf("%d%d",&x,&y);
78 add(x,y);
79 is_root[y]=1;
80 }
81 for(i=1; i<=n; i++)
82 if(is_root[i]==0)
83 root=i;
84 }
85
86 void LCA(int u)
87 {
88 int i,p,j;
89 for(i=head[u]; i!=-1; i=edge[i].next)
90 {
91 int v=edge[i].to;
92 LCA(v);
93 join(u,v);
94 vis[v]=1;
95 }
96
97 if(u==a&&vis[b]==1)
98 ans=seek(b);
99 if(u==b&&vis[a]==1)
100 ans=seek(a);
101
102 return ;
103 }
104
105 void solve()
106 {
107 scanf("%d%d",&a,&b);
108 // vis[root]=1;
109 LCA(root);
110 }
111
112 int main()
113 {
114 int t,m,i,p,j;
115 scanf("%d",&t);
116 for(i=1; i<=t; i++)
117 {
118 init();
119 solve();
120
121 printf("%d\n",ans);
122 }
123 return 0;
124 }