#include <bits/stdc++.h>

using namespace std;

typedef pair<int,int> pii;

const int mod=1e9+7;
const int maxn=1e5+5;
vector<int> vec[maxn];
pii a[maxn];
int tp,q,b[maxn],fac[maxn];
bool bk[maxn],vis[maxn];

int qpow(int x,int y){
	int res=1;
	while(y){
		if(y&1) res=1ll*res*x%mod;
		x=1ll*x*x%mod;
		y>>=1;
	}
	return res;
}

inline void init(int n){
	fac[0]=1;
	for(int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%mod;
}

namespace Sub1{
	int n,m;
	int dfs(int u,int k){
		int tot=(int)vec[k].size();
		if(tot==1) return 1;
		int tmp=tot-1;
		for(int x : vec[k]){
			if(x<u&&bk[x]) tmp--;
		}
		if(!tmp) return 0;
		int ret=1ll*tmp*fac[tot-2]%mod;
		for(int x : vec[k]){
			if(x==u) continue;
			if(k==a[x].first) ret=1ll*ret*dfs(x,a[x].second)%mod;
			else ret=1ll*ret*dfs(x,a[x].first)%mod;
		}
		return ret;
	}
	void solve(){
		while(q--){
			scanf("%d %d",&n,&m);
			for(int i=1;i<=n;i++){
				vec[i].clear();
				bk[i]=0;
			}
			for(int i=1;i<n;i++){
				int u,v;
				scanf("%d %d",&u,&v);
				vec[u].push_back(i);
				vec[v].push_back(i);
				a[i]=make_pair(u,v);
			}
			for(int i=1;i<=m;i++){
				scanf("%d",&b[i]);
				bk[b[i]]=1;
			}
			sort(b+1,b+m+1);
			// for(int i=1;i<=m;i++) printf("%d ",b[i]);
			// puts("");
			// exit(0);
			int res=0;
			for(int i=1;i<=m;i++){
				// printf("kk%d %d %d\n",b[i],a[b[i]].first,a[b[i]].second);
				int ret=1ll*dfs(b[i],a[b[i]].first)*dfs(b[i],a[b[i]].second)%mod;
				res=(res+ret)%mod;
			}
			printf("%d\n",res);
		}
	}
}
namespace Sub2{
	void solve(){
		while(q--){
			int n,m;
			scanf("%d %d",&n,&m);
			for(int i=1;i<n;i++){
				int u,v;
				scanf("%d %d",&u,&v);
			}
			for(int i=1;i<=m;i++){
				int x;
				scanf("%d",&x);
			}
			puts("1");
		}
	}
}
namespace Sub3{
	void solve(){
		int inv2=qpow(2,mod-2);
		while(q--){
			int n,m;
			scanf("%d %d",&n,&m);
			for(int i=1;i<n;i++){
				int u,v;
				scanf("%d %d",&u,&v);
			}
			for(int i=1;i<=m;i++){
				int x;
				scanf("%d",&x);
			}
			if(n<=2){
				puts("1");
				continue;
			}
			int res=1ll*fac[n-1]*inv2%mod;
			res=(res-1ll*fac[n-3]*(n-m)%mod*(n-m-1)%mod*inv2%mod+mod)%mod;
			printf("%d\n",res);
		}
	}
}

int main(){
	
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	
	scanf("%d %d",&tp,&q);
	
	init(1e5);
	
	if(tp<=17) Sub1::solve();
	else if(tp==18) Sub2::solve();
	else if(tp<=21) Sub3::solve();
		
	return 0;
}