#include <bits/stdc++.h>

using namespace std;

const int maxn=1e5+5,mod=1e9+7;

int t[maxn<<1],hd[maxn],nx[maxn<<1],cnt,im[maxn],fm[maxn],to[maxn];
inline void add(int u,int v) {
	nx[++cnt]=hd[u];
	t[cnt]=v;
	hd[u]=cnt;
}

int ans,dp[maxn];
bool vis[maxn];
void dfs(int u,int f) {
	dp[u]=1; int tot=1;
	for(int i=hd[u];i;i=nx[i]) {
		if(t[i]==f) continue;
		dfs(t[i],u);
		dp[u]=1ll*dp[u]*dp[t[i]]*(tot++)%mod;
	}
}
inline void work() {
	memset(hd,0,sizeof(hd));
	int n,m; cin>>n>>m;
	cnt=0;
	for(int i=1;i<n;++i) {
		int u,v;
		cin>>u>>v;
		add(u,v); fm[i]=u;
		add(v,u); to[i]=v;
	}
	for(int i=1;i<=m;++i) cin>>im[i];
	dfs(fm[im[1]],to[im[1]]);
	dfs(to[im[1]],fm[im[1]]);
	cout<<1ll*dp[to[im[1]]]*dp[fm[im[1]]]%mod<<'\n';
}
int main() {
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	ios::sync_with_stdio(0);
	int c,t; cin>>c>>t;
	while(t--) work();
	return 0;
}
