#include<stdio.h>
using namespace std;
typedef long long ll;
const ll Maxn=1e5,mod=1e9+7,Maxa=5e3;
ll n,k,c,T,ans,dp[Maxn+10],m;
ll u[Maxn+10],v[Maxn+10]; 
ll ksm(ll x,ll y){
	ll ret=1;
	while(y!=0){
		if(y&1)
			ret=(ret*x)%mod;
		x=(x*x)%mod;
		y=y>>1;
	}
	return ret%mod;
}
void slove_B(){//c m-1,m(m-1) 
	ll x=1,y=1;
	for(ll i=1;i<=m-1;i++)
		x=(x*i)%mod;
	for(ll i=(m-1)*(m-1)+1;i<=m*(m-1);i++)
		y=(y*i)%mod;
	ans=y*ksm(x,mod-2)%mod;
	ll pp;
	for(ll i=1;i<=k;i++){
		scanf("%lld",&pp);
		printf("%lld\n",ans%mod);
	}
	for(ll i=1;i<=m;i++)
		dp[i]=0;
}
bool C(){
	for(ll i=1;i<=m-1;i++)
		if(v[i]!=u[i+1])
			return false;
	return true;
}
int main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	scanf("%lld%lld",&c,&T);
	for(ll i0=1;i0<=T;i0++){
		scanf("%lld%lld",&n,&k);
		m=n-1;
		for(ll i=1;i<=m;i++)
			scanf("%lld%lld",&u[i],&v[i]);
		if(C()){
			ll q;
			for(ll i=1;i<=k;i++){
				scanf("%lld",&q);
				printf("1\n");
			}
			for(ll i=1;i<=m;i++)
				u[i]=v[i]=0;
			continue;
		}
		slove_B();
	}
	
} 
/*
1 1
5 3
1 2
2 3
3 4
4 5
1
2
3
*/
