#include <bits/stdc++.h>
#include <iomanip>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
using namespace std;
#define ll long long
#define pb push_back
#define all(a) a.begin(),a.end()
#define death ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
////////////////////////////////////global variables//////////////////////////////////////////////////
map<int ,vector<int>> adj;
map<int, bool> vis;
map<int, int> leafCount;
////////////////////////////////////recursion/////////////////////////////////////////////////////////
/////////////////////////////////////functions///////////////////////////////////////////////////////
bool isLeaf(int node) {
return adj[node].size() == 1;
}
void dfs(ll num){
/*if (isLeaf(num) && num != 1) return 1;*/
vis[num] = true;
int leafCnt = 0;
for (int i = 0; i < adj[num].size(); i++) {
int ch = adj[num][i];
if (!vis[ch]) {
dfs(ch);
leafCnt += leafCount[ch];
}
}
if (isLeaf(num) && num != 1) leafCnt = 1;
leafCount[num] = leafCnt;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void neverland() {
int n; cin>>n;
adj.clear();
vis.clear();
leafCount.clear();
for (int i=1;i<n;i++)
{
int x,y;
cin>>x>>y;
adj[x].pb(y);
adj[y].pb(x);
}
int q; cin>>q;
dfs(1);
for (int i=0;i<q;i++)
{
int x,y;
cin>>x>>y;
ll ans=leafCount[x]*leafCount[y];
cout<<ans<<endl;
}
}
int main() {
death;
long long t=1;
cin>>t;
while(t--){
neverland();
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+CiNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPgp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKI2RlZmluZSBvcmRlcmVkX3NldCB0cmVlPGludCwgbnVsbF90eXBlLCBsZXNzPGludD4sIHJiX3RyZWVfdGFnLCB0cmVlX29yZGVyX3N0YXRpc3RpY3Nfbm9kZV91cGRhdGU+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgYWxsKGEpICBhLmJlZ2luKCksYS5lbmQoKQojZGVmaW5lIGRlYXRoIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL2dsb2JhbCB2YXJpYWJsZXMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwptYXA8aW50ICx2ZWN0b3I8aW50Pj4gYWRqOwptYXA8aW50LCBib29sPiB2aXM7Cm1hcDxpbnQsIGludD4gbGVhZkNvdW50OwovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9yZWN1cnNpb24vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9mdW5jdGlvbnMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCmJvb2wgaXNMZWFmKGludCBub2RlKSB7CiAgICByZXR1cm4gYWRqW25vZGVdLnNpemUoKSA9PSAxOwp9CnZvaWQgZGZzKGxsIG51bSl7CiAgICAvKmlmIChpc0xlYWYobnVtKSAmJiBudW0gIT0gMSkgcmV0dXJuIDE7Ki8KICAgIHZpc1tudW1dID0gdHJ1ZTsKICAgIGludCBsZWFmQ250ID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWRqW251bV0uc2l6ZSgpOyBpKyspIHsKICAgICAgICBpbnQgY2ggPSBhZGpbbnVtXVtpXTsKICAgICAgICBpZiAoIXZpc1tjaF0pIHsKICAgICAgICAgICAgZGZzKGNoKTsKICAgICAgICAgICAgbGVhZkNudCArPSBsZWFmQ291bnRbY2hdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgaWYgKGlzTGVhZihudW0pICYmIG51bSAhPSAxKSBsZWFmQ250ID0gMTsKICAgIGxlYWZDb3VudFtudW1dID0gbGVhZkNudDsKfQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKdm9pZCBuZXZlcmxhbmQoKSB7CiAgICBpbnQgbjsgY2luPj5uOwogICAgYWRqLmNsZWFyKCk7CiAgICB2aXMuY2xlYXIoKTsKICAgIGxlYWZDb3VudC5jbGVhcigpOwogICAgZm9yIChpbnQgaT0xO2k8bjtpKyspCiAgICB7CiAgICAgICAgaW50IHgseTsKICAgICAgICBjaW4+Png+Pnk7CiAgICAgICAgYWRqW3hdLnBiKHkpOwogICAgICAgIGFkalt5XS5wYih4KTsKICAgIH0KICAgIGludCBxOyBjaW4+PnE7CiAgICBkZnMoMSk7CiAgICBmb3IgKGludCBpPTA7aTxxO2krKykKICAgIHsKICAgICAgICBpbnQgeCx5OwogICAgICAgIGNpbj4+eD4+eTsKICAgICAgICBsbCBhbnM9bGVhZkNvdW50W3hdKmxlYWZDb3VudFt5XTsKICAgICAgICBjb3V0PDxhbnM8PGVuZGw7CiAgICB9Cgp9CmludCBtYWluKCkgewogICAgZGVhdGg7CiAgICBsb25nIGxvbmcgdD0xOwogICAgY2luPj50OwogICAgd2hpbGUodC0tKXsKICAgICAgICBuZXZlcmxhbmQoKTsKICAgIH0KfQ==