#include using namespace std; const int N = 500001; int n,m,s; int depth[N], Log[N]; int dbl[N][20]; //倍增数组 int tot; vector graph[N]; void dfs(int cur, int fa) { //todo } int lca(int x,int y) { // 把两个点升至同一高度,再一起跳 // TODO if(x==y) return x; // 两个点同时往上跳,跳到LCA的下一层为止 // TODO return dbl[x][0]; } /* 倍增算法时间复杂度是O(nlogn) */ int main() { scanf("%d%d%d",&n,&m,&s); for(int i=1; i<=n-1; i++) { int x,y; scanf("%d%d",&x,&y); //todo } dfs(s,0); // 建树 // 预处理,常数优化 for(int i=2; i<=n; i++) { //todo } for(int i=1; i<=m; i++) { int x,y; scanf("%d%d",&x,&y); printf("%d\n",lca(x,y)); } return 0; }