#include <bits/stdc++.h>
#define pu push
#define pf push_front
#define pb push_back
#define pof pop_front
#define pob pop_back
#define fi first
#define se second
#define el cout<<"\n"
#define ll long long
#define ull unsigned long long
#define ld long double
#define MASK(i) (1LL<<(i))
#define BIT(x, i) (((x)>>(i))&1)
#define SET_ON(x, i) ((x)|MASK(i))
#define SET_OFF(x, i) ((x)&~MASK(i))
#define c_bit(i) __builtin_popcount(i)
const int MAX_SIZE = 100010;
const int LOG = 18;
const int inf = (int)1e9+7;
using namespace std;
mt19937_64 rng(chrono::steady_clock::now().time_since_epoch().count());
long long random(long long l, long long r){
return uniform_int_distribution<long long>(l, r)(rng);
}
template<class T1, class T2>
bool maximize(T1 &x, T2 y){if(x<y){x=y; return true;} return false;}
template<class T1, class T2>
bool minimize(T1 &x, T2 y){if(x>y){x=y; return true;} return false;}
int numNode, numQuery, length;
int nodeID[MAX_SIZE], height[MAX_SIZE];
int rmq[2*MAX_SIZE+3][LOG], valueID[2*MAX_SIZE+3];
vector<int>adj[MAX_SIZE];
// 13
// 1 3
// 1 5
// 1 2
// 3 6
// 6 9
// 5 4
// 5 7
// 5 13
// 4 8
// 4 10
// 7 11
// 7 12
void pre_dfs(int u, int par){
++length;
nodeID[u] = length;
valueID[length] = u;
for (auto v:adj[u]) if (v!=par){
height[v] = height[u] + 1;
pre_dfs(v, u);
++length;
valueID[length] = u;
}
}
int min_high_node(int u, int v){
if (height[u] < height[v]) return u;
return v;
}
int getLCA(int u, int v){
int l = nodeID[u], r = nodeID[v]; if (l>r) swap(l, r);
int k = 31 - __builtin_clz(r-l+1);
return min_high_node(rmq[l][k], rmq[r-MASK(k)+1][k]);
}
void ilovesunshine(){
cin>>numNode;
for (int i=1; i<numNode; ++i){
int u, v; cin>>u>>v;
adj[u].pb(v);
adj[v].pb(u);
}
pre_dfs(1, 0);
for (int i=1; i<=length; ++i){
rmq[i][0] = valueID[i];
}
for (int j=1; j<=LOG; ++j){
for (int i=1; i+MASK(j)-1<=length; ++i){
rmq[i][j] = min_high_node(rmq[i][j-1], rmq[i+MASK(j-1)][j-1]);
}
}
cin>>numQuery;
while (numQuery--){
int u, v; cin>>u>>v;
cout<<getLCA(u, v)<<"\n";
}
}
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
ilovesunshine();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgcHUgcHVzaAojZGVmaW5lIHBmIHB1c2hfZnJvbnQKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBwb2YgcG9wX2Zyb250CiNkZWZpbmUgcG9iIHBvcF9iYWNrCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBlbCBjb3V0PDwiXG4iCiNkZWZpbmUgbGwgbG9uZyBsb25nIAojZGVmaW5lIHVsbCB1bnNpZ25lZCBsb25nIGxvbmcKI2RlZmluZSBsZCBsb25nIGRvdWJsZQojZGVmaW5lIE1BU0soaSkgKDFMTDw8KGkpKQojZGVmaW5lIEJJVCh4LCBpKSAoKCh4KT4+KGkpKSYxKQkKI2RlZmluZSBTRVRfT04oeCwgaSkgKCh4KXxNQVNLKGkpKQojZGVmaW5lIFNFVF9PRkYoeCwgaSkgKCh4KSZ+TUFTSyhpKSkKI2RlZmluZSBjX2JpdChpKSBfX2J1aWx0aW5fcG9wY291bnQoaSkKY29uc3QgaW50IE1BWF9TSVpFID0gMTAwMDEwOwpjb25zdCBpbnQgTE9HID0gMTg7CmNvbnN0IGludCBpbmYgPSAoaW50KTFlOSs3Owp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKbXQxOTkzN182NCBybmcoY2hyb25vOjpzdGVhZHlfY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKS5jb3VudCgpKTsKCmxvbmcgbG9uZyByYW5kb20obG9uZyBsb25nIGwsIGxvbmcgbG9uZyByKXsKCXJldHVybiB1bmlmb3JtX2ludF9kaXN0cmlidXRpb248bG9uZyBsb25nPihsLCByKShybmcpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUMSwgY2xhc3MgVDI+CiAgICBib29sIG1heGltaXplKFQxICZ4LCBUMiB5KXtpZih4PHkpe3g9eTsgcmV0dXJuIHRydWU7fSByZXR1cm4gZmFsc2U7fQp0ZW1wbGF0ZTxjbGFzcyBUMSwgY2xhc3MgVDI+CiAgICBib29sIG1pbmltaXplKFQxICZ4LCBUMiB5KXtpZih4Pnkpe3g9eTsgcmV0dXJuIHRydWU7fSByZXR1cm4gZmFsc2U7fQoKaW50IG51bU5vZGUsIG51bVF1ZXJ5LCBsZW5ndGg7CmludCBub2RlSURbTUFYX1NJWkVdLCBoZWlnaHRbTUFYX1NJWkVdOwppbnQgcm1xWzIqTUFYX1NJWkUrM11bTE9HXSwgdmFsdWVJRFsyKk1BWF9TSVpFKzNdOwoKdmVjdG9yPGludD5hZGpbTUFYX1NJWkVdOwoKLy8gMTMKLy8gMSAzCi8vIDEgNQovLyAxIDIKLy8gMyA2Ci8vIDYgOQovLyA1IDQKLy8gNSA3Ci8vIDUgMTMKLy8gNCA4Ci8vIDQgMTAKLy8gNyAxMQovLyA3IDEyCgp2b2lkIHByZV9kZnMoaW50IHUsIGludCBwYXIpewoJKytsZW5ndGg7Cglub2RlSURbdV0gPSBsZW5ndGg7Cgl2YWx1ZUlEW2xlbmd0aF0gPSB1OwoJZm9yIChhdXRvIHY6YWRqW3VdKSBpZiAodiE9cGFyKXsKCQloZWlnaHRbdl0gPSBoZWlnaHRbdV0gKyAxOwoJCXByZV9kZnModiwgdSk7CgkJKytsZW5ndGg7CgkJdmFsdWVJRFtsZW5ndGhdID0gdTsKCX0KfQoKaW50IG1pbl9oaWdoX25vZGUoaW50IHUsIGludCB2KXsKCWlmIChoZWlnaHRbdV0gPCBoZWlnaHRbdl0pIHJldHVybiB1OwoJcmV0dXJuIHY7Cn0KCmludCBnZXRMQ0EoaW50IHUsIGludCB2KXsKCWludCBsID0gbm9kZUlEW3VdLCByID0gbm9kZUlEW3ZdOyBpZiAobD5yKSBzd2FwKGwsIHIpOwoJaW50IGsgPSAzMSAtIF9fYnVpbHRpbl9jbHooci1sKzEpOwoJcmV0dXJuIG1pbl9oaWdoX25vZGUocm1xW2xdW2tdLCBybXFbci1NQVNLKGspKzFdW2tdKTsKfQoKdm9pZCBpbG92ZXN1bnNoaW5lKCl7CgljaW4+Pm51bU5vZGU7Cglmb3IgKGludCBpPTE7IGk8bnVtTm9kZTsgKytpKXsKCQlpbnQgdSwgdjsgY2luPj51Pj52OwoJCWFkalt1XS5wYih2KTsKCQlhZGpbdl0ucGIodSk7CQoJfQoKCXByZV9kZnMoMSwgMCk7CgoJZm9yIChpbnQgaT0xOyBpPD1sZW5ndGg7ICsraSl7CgkJcm1xW2ldWzBdID0gdmFsdWVJRFtpXTsKCX0KCglmb3IgKGludCBqPTE7IGo8PUxPRzsgKytqKXsKCQlmb3IgKGludCBpPTE7IGkrTUFTSyhqKS0xPD1sZW5ndGg7ICsraSl7CgkJCXJtcVtpXVtqXSA9IG1pbl9oaWdoX25vZGUocm1xW2ldW2otMV0sIHJtcVtpK01BU0soai0xKV1bai0xXSk7CgkJfSAJCgl9CgoJY2luPj5udW1RdWVyeTsKCXdoaWxlIChudW1RdWVyeS0tKXsKCQlpbnQgdSwgdjsgY2luPj51Pj52OwoJCWNvdXQ8PGdldExDQSh1LCB2KTw8IlxuIjsKCX0KfQoKaW50IG1haW4oKXsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwoJaWxvdmVzdW5zaGluZSgpOwoJcmV0dXJuIDA7Cn0=