import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) { new Main().run(); }
class node{
int e;
int ne;
int num;
node(int e,int ne)
{
this.e=e;this.ne = ne;
}
node(int e,int ne,int num)
{
this.e = e;this.ne =ne;this.num = num;
}
}
int N = 550010;
int fa[] = new int[N],h[] = new int[N],hq[] =new int[N];
boolean st[] = new boolean[N];
node edge[] = new node[2*N],query[] =new node[N];
int ans[] = new int[N];
int n,m,s,cnt,qcnt;
int find(int x)
{
if(x==fa[x]) return x;
return fa[x] = find(fa[x]);
}
void tarjan(int x)
{
st[x]= true;
for(int i=h[x];i!=-1;i=edge[i].ne)
{
int y = edge[i].e;
if(st[y]==false)
{
tarjan(y);
fa[y] = x;
}
}
for(int i=hq[x];i!=-1;i=query[i].ne)
{
int y = query[i].e;
if(st[y]==true)
ans[query[i].num] = find(y);
}
}
void addedge(int a,int b)
{
edge[cnt] =new node(b,h[a]);
h[a] = cnt++;
}
void addquery(int a,int b,int num)
{
query[qcnt] =new node(b,hq[a],num);
hq[a] = qcnt++;
}
void run()
{
Scanner sc = new Scanner(System.in);
n =sc.nextInt();m=sc.nextInt();s=sc.nextInt();
Arrays.fill(h, -1);Arrays.fill(hq, -1);
for(int i=1;i<n;i++)
{
fa[i] = i;
int a,b;a=sc.nextInt();b=sc.nextInt();
addedge(a,b);addedge(b,a);
}
fa[n] = n;
for(int i=1;i<=m;i++)
{
int a,b;
a=sc.nextInt();b=sc.nextInt();
addquery(a,b,i);addquery(b,a,i);
}
tarjan(s);
for(int i=1;i<=m;i++) System.out.println(ans[i]);
}
}