1 #include <bits/stdc++.h>
2 #define _for(i,a,b) for(int i = (a);i < b;i ++)
3 #define _rep(i,a,b) for(int i = (a);i > b;i --)
4 #define INF 0x3f3f3f3f
5 #define pb push_back
6 #define maxn 500003
7 typedef long long ll;
8 using namespace std;
9
10 inline ll read()
11 {
12 ll ans = 0;
13 char ch = getchar(), last = ' ';
14 while(!isdigit(ch)) last = ch, ch = getchar();
15 while(isdigit(ch)) ans = (ans << 1) + (ans << 3) + ch - '0', ch = getchar();
16 if(last == '-') ans = -ans;
17 return ans;
18 }
19 inline void write(ll x)
20 {
21 if(x < 0) x = -x, putchar('-');
22 if(x >= 10) write(x / 10);
23 putchar(x % 10 + '0');
24 }
25
26 int N,M,S;
27 vector<int> G[maxn];
28 bool vis[maxn];
29 int depth[maxn];
30 int fa[maxn][22];
31 void dfs(int u)
32 {
33 vis[u] = 1;
34 _for(i,0,G[u].size())
35 if(!vis[G[u][i]])
36 {
37 depth[G[u][i]] = depth[u]+1;
38 fa[G[u][i]][0] = u;
39 dfs(G[u][i]);
40 }
41 }
42 void bz()
43 {
44 _for(j,1,21)
45 _for(i,1,N+1)
46 fa[i][j] = fa[fa[i][j-1]][j-1];
47 }
48 int LCA(int u,int v)
49 {
50 //保证u深度较大
51 if(depth[u]<depth[v])
52 swap(u,v);
53
54 int dc = depth[u]-depth[v];
55 _for(i,0,21)
56 if((1<<i)&dc)
57 u = fa[u][i];
58
59 if(u==v) return u;
60 _rep(i,20,-1)
61 if(fa[u][i]!=fa[v][i])
62 u = fa[u][i],v = fa[v][i];
63
64 return fa[u][0];
65 }
66 int main()
67 {
68 N = read();
69 M = read();
70 S = read();
71 _for(i,0,N-1)
72 {
73 int a = read();
74 int b = read();
75 G[a].pb(b);
76 G[b].pb(a);
77 }
78 //求深度 和处理 fa
79 dfs(S);
80 bz();
81 _for(i,0,M)
82 {
83 int a = read();
84 int b = read();
85 write(LCA(a,b));
86 printf("\n");
87 }
88 return 0;
89 }