#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+1;
vector<int > tree[maxn];
int d[maxn],f[maxn][30];
int n,m;
void dfs(int fa,int deth,int now){
if(fa!=-1){
f[now][0]=fa;
d[now]=deth;
for(int i=1;pow(i,2)<=deth;i++) f[now][i]=f[f[now][i-1]][i-1];
}
for(int i=0;i<tree[now].size();i++) if(tree[now][i]!=fa) dfs(now,deth+1,tree[now][i]);
}
int work_(int x,int y){
if(d[x]>d[y]) swap(x,y);
while(d[y]>d[x]) y=f[y][int(log2(d[y]-d[x]))];
if(x==y) return x;
for(int i=int(log2(d[x]));i>=0;i--){
if(f[x][i]!=f[y][i]){
x=f[x][i];
y=f[y][i];
}
}
return f[x][0];
}
int main()
{
cin>>n;
for(int i=1;i<=n-1;i++){
int x,y;
cin>>x>>y;
tree[x].push_back(y);
tree[y].push_back(x);
}
d[1]=0;
dfs(-1,0,1);
cin>>m;
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
int k=work_(x,y);
cout<<d[y]-d[k]+d[x]-d[k]+1<<endl;
}
return 0;
}