#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
int h[N],e[N],ne[N],idx;
void add(int a,int b){
e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
int n,m,s;
int pos[N],val[N<<1][20];
int cnt=0;
int euler[N<<1];
int sum[N];
int dep[N];
void dfs(int u,int fa){
dep[u]=dep[fa]+1;
pos[u]=cnt+1;
for(int i=h[u];i;i=ne[i]){
int v=e[i];
if(v==fa) continue;
euler[++cnt]=u;
dfs(v,u);
}
euler[++cnt]=u;
}
int fa[N][20];
int Log[N];
int query(int l,int r){
int s=r-l+1,k=Log[s];
return min(dep[fa[r-(1<<k)+1][k]],dep[fa[l][k]]);
}
int get(int u,int v){
int l=pos[u],r=pos[v];
if(l>r) swap(l,r);
return query(l,r);
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
cin>>n>>m>>s;
for(int i=1;i<=n;i++){
int u,v;
cin>>u>>v;
add(u,v),add(v,u);
}
dfs(s,0);
Log[0]=-1;
for(int i=1;i<N;i++) Log[i]=Log[i>>1]+1;
for(int i=1;i<=cnt;i++){
fa[i][0]=euler[i];
}
for(int j=1;(1<<j)<=cnt;j++){
for(int i=1;i+(1<<(j-1))+1<=cnt;i++){
if(dep[fa[i][j-1]]<dep[fa[i+(1<<(j-1))+1][j-1]]) fa[i][j]=fa[i][j-1];
else fa[i][j]=fa[i+(1<<(j-1))+1][j-1];
}
}
for(int i=1;i<=m;i++){
int l,r;cin>>l>>r;
int LCA=get(l,r);
cout<<LCA<<endl;
}
return 0;
}