import java.io.*;
import java.util.*;
public class Main {
public static PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
public static StreamTokenizer st = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
public static int[] fa;
public static List<Integer>[] g;
public static List<int[]>[] queries;
public static int[] ans;
public static boolean[] vis;
public static void main(String[] args) {
int n=Int(),m=Int(),s=Int();
g=new List[n+1];
Arrays.setAll(g,e->new ArrayList<>());
for(int i=1;i<n;i++){
int u=Int(),v=Int();
g[u].add(v);
g[v].add(u);
}
queries=new List[n+1];
Arrays.setAll(queries,e->new ArrayList<>());
for(int i=0;i<m;i++){
int u=Int(),v=Int();
queries[u].add(new int[]{v,i});
if(v!=u){
queries[v].add(new int[]{u, i});
}
}
fa=new int[n+1];
for(int i=0;i<=n;i++){
fa[i]=i;
}
ans=new int[m];
vis=new boolean[n+1];
tarjan(s);
for(int a : ans){
pw.println(a);
}
pw.flush();
}
public static void tarjan(int u){
vis[u]=true;
for(int v : g[u]){
if(!vis[v]){
tarjan(v);
fa[v]=u;
}
}
for(int[] q : queries[u]){
int v=q[0],idx=q[1];
if(vis[v]){
ans[idx]=find(v);
}
}
}
public static int find(int x){
if(fa[x]==x){
return x;
}
return fa[x]=find(fa[x]);
}
public static int Int() {
try {
st.nextToken();
} catch (IOException e) {
e.printStackTrace();
}
return (int) st.nval;
}
}