// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
int ver[2*500000],nex[2*500000],head[2*500000],d[2*500000],p[2*500000][23],tot;
void add(int x,int y){
	ver[++tot]=y;nex[tot]=head[x];head[x]=tot;
}
int read(){
	int x=0;
	char ch;
	while(ch<'0'||ch>'9')ch=getchar();
	while(ch>'0'&&ch<'9'){
		x=x*10+ch-'0';
		ch=getchar();
	}
	return x;
}
void dfs(int x,int fa){
	d[x]=d[fa]+1;
	p[x][0]=fa;
	for(int i=1;(1<<i)<=d[x];i++)
	p[x][i]=p[p[x][i-1]][i-1];
	for(int i=head[x];i;i=nex[i]){
		if(ver[i]!=fa)
		dfs(ver[i],x);	
	}
}
int lca(int a,int b){
	if(d[a]>d[b])swap(a,b);
	for(int i=20;i>=0;i--)
	if(d[a]<=d[b]-(1<<i))
	b=p[b][i];
	if(a==b)
	return a;
	for(int i=20;i>=0;i--)
	if(p[a][i]==p[b][i])continue;
	else a=p[a][i],b=p[b][i];
	
	return p[a][0];
}
int main(){
	int i,j,n,m,t,k,s;
	scanf("%d %d %d",&n,&m,&s);
	for(int i=1;i<n;i++)
	{
		int a,b;
		scanf("%d %d",&a,&b);
		add(a,b);
		add(b,a);
	}
	dfs(s,0);
	for(i=1;i<=m;i++)
	{
		int a,b;
	scanf("%d %d",&a,&b);
		cout<<lca(a,b)<<endl;
	}
}