#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define F first
#define S second
#define pii pair<int, int>
#define eb emplace_back
#define all(v) v.begin(), v.end()
#define rep(i, n) for (int i = 0; i < (n); ++i)
#define rep3(i, l, n) for (int i = l; i < (n); ++i)
#define chmax(a, b) a = (a >= b ? a : b)
#define chmin(a, b) a = (a <= b ? a : b)
#define out(a) cout << a << endl
#define outa(a, n) { rep(_, n) cout << a[_] << " "; cout << endl; }
#define outp(a, n) { cout << endl; rep(_, n) cout << a[_].F << " " << a[_].S << endl; }
#define SZ(v) (int)v.size()
#define inf (int)(1e9+7)
#define abs(x) (x >= 0 ? x : -(x))
#define ceil(a, b) a / b + !!(a % b)
#define FIX(a) fixed << setprecision(a)
#define LB(v, n) (int)(lower_bound(all(v), n) - v.begin())
#define UB(v, n) (int)(upper_bound(all(v), n) - v.begin())
ll pow(ll a, int b) { return b ? pow(a * a, b / 2) * (b % 2 ? a : 1) : 1; }
ll nck(int n, int k) { ll ret = 1; rep(i, k) {ret *= n - i; ret /= i + 1; } return ret; } // n <= 60
template<typename T> T gcd(T a, T b) { if (b == 0) return a; return gcd(b, a % b); }
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
vector<int> v[n];
rep(i, n - 1) {
int a, b;
cin >> a >> b;
a--; b--;
v[a].eb(b);
v[b].eb(a);
}
int reached[n];
fill_n(reached, n, inf);
reached[0] = 0;
int lca[n];
lca[0] = 0;
queue<int> q;
q.push(0);
while (!q.empty()) {
int now = q.front();
q.pop();
for (auto nxt : v[now]) {
if (reached[nxt] != inf) continue;
reached[nxt] = reached[now] + 1;
lca[nxt] = now;
q.push(nxt);
}
}
// outa(lca, n);
int qu;
cin >> qu;
rep(i, qu) {
int a, b;
cin >> a >> b;
a--; b--;
vector<int> anc;
int now = a;
while (1) {
anc.eb(now);
if (now == 0) break;
now = lca[now];
}
// outa(anc, SZ(anc));
now = b;
int ans = -1;
while (1) {
rep(j, SZ(anc)) {
if (anc[j] == now) {
ans = now;
break;
}
}
if (ans != -1) break;
now = lca[now];
}
out(reached[a] + reached[b] + 1 - 2 * reached[ans]);
}
}