Solution:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5+5;
vector<int> G[maxn];
ll ans[maxn];
int n;
void Build() { // 建树
for(int i=1;i<=n;i++) {
G[i].clear();
ans[i] = 0;
}
cin >> n;
for(int i=0;i<n-1;i++) {
int u,v; cin >> u >> v;
G[u].push_back(v);
G[v].push_back(u);
}
}
void dfs(int v, int pre) {
if(G[v].size() == 1 && G[v][0] == pre) { // 掉落位置
ans[v] = 1;
return;
}
for(auto nxt : G[v]) {
if(nxt == pre) continue; // 不要往父节点走
dfs(nxt,v);
ans[v] += ans[nxt]; //遍历点v的所有子节点,累加到v上
}
}
void solve() {
int q; cin >> q;
while(q--) {
int x,y; cin >> x >> y;
ll sum = ans[x]*ans[y];
cout << sum << endl;
}
}
int main() {
int t; cin >> t;
while(t--) {
Build();
dfs(1,-1);
solve();
}
return 0;
}