#include<bits/stdc++.h>
using namespace std;
template<typename T>inline void read(T &x){
	x=0;char c='-';
	while(c<'0'||c>'9')c=getchar();
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar(); 
	}
	return;
}
typedef long long ll;
int n,u[100005],v[100005];
ll ans;
ll mod=1000000007,p2[100005]={1},dp[100005],fac[100005]={1};
void SpecialA(){
	int T;read(T);
	while(T--){
		cout<<1<<endl;
	}
}
void SpecialB(){
	int T;read(T);
	while(T--){
		int THE_USELESS;
		read(n);
		int k;read(k);
		for(int i=0;i<n;i++)read(THE_USELESS),read(THE_USELESS);
		for(int i=0;i<k;i++){
			read(THE_USELESS);
		}
		cout<<k*fac[n-2]%mod<<endl;
	}
}
vector<int>g[100005];
void dfs(int x,int fa){
	int cnt=0;
	for(int i=0;i<(int)g[x].size();i++){
		int u=g[x][i];
		dp[x]=1ll;
		if(u!=fa){
			cnt++;
			dfs(u,x);
			dp[x]*=dp[u];
		}
	}
}
int main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	for(int i=1;i<=100000;i++)p2[i]=(p2[i-1]*2)%mod;
	for(int i=1;i<=100000;i++)fac[i]=(fac[i-1]*i)%mod;
	int c;cin>>c;
	if(c==18)SpecialA();
	else if(c==19||c==20||c==21)SpecialB();
	else{
		int T;read(T);
		while(T--){
			read(n);
			int q;read(q);
			for(int i=1;i<=n;i++)g[i].clear();
			for(int i=1;i<n;i++){
				read(u[i]);read(v[i]);
				g[u[i]].push_back(v[i]);
				g[v[i]].push_back(u[i]);
			}
			while(q--){
				int k;read(k);
				dfs(u[k],v[k]);
				dfs(v[k],u[k]);
				cout<<(dp[u[k]]*dp[v[k]])%mod<<endl;
			}
		}
	}
	return 0;
}
