#include <bits/stdc++.h>
using namespace std;
long long T,n,m,k,p=1e9+7,new_p=1e9+9;
int dx[]={-1,1,0,0};
int dy[]={0,0,-1,1};
vector<long long>visited(1e6),Depth(1e6,0);
void topological_sort(int x,vector<vector<long long>>&a,vector<long long>&ans){
if(visited[x])return ;
visited[x]=1;
for(auto i:a[x]){
topological_sort(i,a,ans);
}
ans.push_back(x);
return;
}
void dfs(int x,vector<vector<long long>>&a,vector<vector<long long>>&lca_of,long long depth,long long par){
Depth[x]=depth;
lca_of[x][0]=par;
for(int i=1;i<30;i++)lca_of[x][i]=lca_of[lca_of[x][i-1]][i-1];
for(auto i:a[x]){
dfs(i,a,lca_of,depth+1,x);
}
return;
}
long long power(long long a,long long b,long long p){
if(b==0)return 1;
long long res=power(a,b/2,p);
if(b%2){res=(res*res)%p;return (res*a)%p;}
return (res*res)%p;
}
long long gcd(long long a,long long b){
if(b==0)return a;
return gcd(b,a%b);
}
long long lcm(long long a,long long b){
return abs(a*b)/gcd(a,b);
}
long long lc(long long x,long long y,vector<vector<long long>>&lca_of){
if(Depth[x]>Depth[y]){
swap(x,y);
}
while(Depth[x]!=Depth[y]){
for(int i=1;i<30;i++){
if(lca_of[x][i]==lca_of[y][i]){
y=lca_of[y][i-1];
break;
}
}
}
while(x!=y){
for(int i=1;i<30;i++){
if(lca_of[x][i]==lca_of[y][i]){
y=lca_of[y][i-1];
x=lca_of[x][i-1];
break;
}
}
}
return x;
}
int main(){
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
// freopen("zeros.in", "r", stdin);
// freopen(".out", "w", stdout);
T=1;
cin>>T;
vector<long long>fact(2e5+3),invers(2e5+3);
invers[0]=fact[0]=invers[1]=fact[1]=1;
for(long long i=2;i<=2e5;i++){
fact[i]=i*fact[i-1];
fact[i]%=p;
invers[i]=power(fact[i],p-2,p);
}
cout << fact[100000];
return 0;
while(T--){
cin>>n;
vector<vector<long long>>a(n+1),lca_of(n+1,vector<long long>(30,1));
for(int i=1;i<n;i++){
long long u,v;
cin>>u>>v;
a[u].push_back(v);
}
dfs(1,a,lca_of,0,1);
cin>>m;
while(m--){
long long u,v;
cin>>u>>v;
long long lca=lc(u,v,lca_of);
long long ans1=Depth[u]-Depth[lca];
long long ans2=Depth[v]-Depth[lca];
long long ans=fact[ans1+ans2];
ans*=invers[ans1];
ans%=p;
ans*=invers[ans2];
ans%=p;
cout<<ans<<'\n';
}
}
return 0;
}
/*
2
6
1 2
1 3
2 4
2 5
3 6
5
1 2
2 3
3 4
4 5
5 6
2
1 2
1
1 2
*/
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmxvbmcgbG9uZyBULG4sbSxrLHA9MWU5KzcsbmV3X3A9MWU5Kzk7CmludCBkeFtdPXstMSwxLDAsMH07CmludCBkeVtdPXswLDAsLTEsMX07CnZlY3Rvcjxsb25nIGxvbmc+dmlzaXRlZCgxZTYpLERlcHRoKDFlNiwwKTsKdm9pZCB0b3BvbG9naWNhbF9zb3J0KGludCB4LHZlY3Rvcjx2ZWN0b3I8bG9uZyBsb25nPj4mYSx2ZWN0b3I8bG9uZyBsb25nPiZhbnMpewogICAgICAgICAgICAgICAgaWYodmlzaXRlZFt4XSlyZXR1cm4gOwogICAgICAgICAgICAgICAgdmlzaXRlZFt4XT0xOwogICAgICAgICAgICAgICAgZm9yKGF1dG8gaTphW3hdKXsKICAgICAgICAgICAgICAgICAgICB0b3BvbG9naWNhbF9zb3J0KGksYSxhbnMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYW5zLnB1c2hfYmFjayh4KTsKICAgICAgICAgICAgICAgIHJldHVybjsKIH0Kdm9pZCBkZnMoaW50IHgsdmVjdG9yPHZlY3Rvcjxsb25nIGxvbmc+PiZhLHZlY3Rvcjx2ZWN0b3I8bG9uZyBsb25nPj4mbGNhX29mLGxvbmcgbG9uZyBkZXB0aCxsb25nIGxvbmcgcGFyKXsKICAgICAgICAgICAgICAgIERlcHRoW3hdPWRlcHRoOwogICAgICAgICAgICAgICAgbGNhX29mW3hdWzBdPXBhcjsKICAgICAgICAgICAgICAgIGZvcihpbnQgaT0xO2k8MzA7aSsrKWxjYV9vZlt4XVtpXT1sY2Ffb2ZbbGNhX29mW3hdW2ktMV1dW2ktMV07CiAgICAgICAgICAgICAgICBmb3IoYXV0byBpOmFbeF0pewogICAgICAgICAgICAgICAgICAgIGRmcyhpLGEsbGNhX29mLGRlcHRoKzEseCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICB9CmxvbmcgbG9uZyBwb3dlcihsb25nIGxvbmcgYSxsb25nIGxvbmcgYixsb25nIGxvbmcgcCl7CiAgICAgICAgICAgICAgICBpZihiPT0wKXJldHVybiAxOwogICAgICAgICAgICAgICAgbG9uZyBsb25nIHJlcz1wb3dlcihhLGIvMixwKTsKICAgICAgICAgICAgICAgIGlmKGIlMil7cmVzPShyZXMqcmVzKSVwO3JldHVybiAocmVzKmEpJXA7fQogICAgICAgICAgICAgICAgcmV0dXJuIChyZXMqcmVzKSVwOwogfQpsb25nIGxvbmcgZ2NkKGxvbmcgbG9uZyBhLGxvbmcgbG9uZyBiKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGI9PTApcmV0dXJuIGE7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2NkKGIsYSViKTsKIH0KbG9uZyBsb25nIGxjbShsb25nIGxvbmcgYSxsb25nIGxvbmcgYil7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFicyhhKmIpL2djZChhLGIpOwp9CmxvbmcgbG9uZyBsYyhsb25nIGxvbmcgeCxsb25nIGxvbmcgeSx2ZWN0b3I8dmVjdG9yPGxvbmcgbG9uZz4+JmxjYV9vZil7CiAgICAgICAgICAgICAgICBpZihEZXB0aFt4XT5EZXB0aFt5XSl7CiAgICAgICAgICAgICAgICAgICAgc3dhcCh4LHkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgd2hpbGUoRGVwdGhbeF0hPURlcHRoW3ldKXsKICAgICAgICAgICAgICAgICAgICBmb3IoaW50IGk9MTtpPDMwO2krKyl7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxjYV9vZlt4XVtpXT09bGNhX29mW3ldW2ldKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHk9bGNhX29mW3ldW2ktMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHdoaWxlKHghPXkpewogICAgICAgICAgICAgICAgICAgIGZvcihpbnQgaT0xO2k8MzA7aSsrKXsKICAgICAgICAgICAgICAgICAgICAgICAgaWYobGNhX29mW3hdW2ldPT1sY2Ffb2ZbeV1baV0pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgeT1sY2Ffb2ZbeV1baS0xXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHg9bGNhX29mW3hdW2ktMV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiB4Owp9CmludCBtYWluKCl7CiAgICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTtjaW4udGllKDApO2NvdXQudGllKDApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyZW9wZW4oInplcm9zLmluIiwgInIiLCBzdGRpbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgZnJlb3BlbigiLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVD0xOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaW4+PlQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlY3Rvcjxsb25nIGxvbmc+ZmFjdCgyZTUrMyksaW52ZXJzKDJlNSszKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52ZXJzWzBdPWZhY3RbMF09aW52ZXJzWzFdPWZhY3RbMV09MTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxvbmcgbG9uZyBpPTI7aTw9MmU1O2krKyl7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFjdFtpXT1pKmZhY3RbaS0xXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWN0W2ldJT1wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmVyc1tpXT1wb3dlcihmYWN0W2ldLHAtMixwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpjb3V0IDw8IGZhY3RbMTAwMDAwXTsKcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZShULS0pewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpbj4+bjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWN0b3I8dmVjdG9yPGxvbmcgbG9uZz4+YShuKzEpLGxjYV9vZihuKzEsdmVjdG9yPGxvbmcgbG9uZz4oMzAsMSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpbnQgaT0xO2k8bjtpKyspewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgdSx2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaW4+PnU+PnY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZnMoMSxhLGxjYV9vZiwwLDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2luPj5tOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUobS0tKXsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgdSx2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpbj4+dT4+djsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgbGNhPWxjKHUsdixsY2Ffb2YpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBhbnMxPURlcHRoW3VdLURlcHRoW2xjYV07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIGFuczI9RGVwdGhbdl0tRGVwdGhbbGNhXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgYW5zPWZhY3RbYW5zMSthbnMyXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnMqPWludmVyc1thbnMxXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnMlPXA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zKj1pbnZlcnNbYW5zMl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5zJT1wOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdXQ8PGFuczw8J1xuJzsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cn0KLyoKMgo2CjEgMgoxIDMKMiA0CjIgNQozIDYKNQoxIDIKMiAzCjMgNAo0IDUKNSA2CjIKMSAyCjEKMSAyCiovCg==