#include<bits/stdc++.h>
using namespace std;
const int maxn=1010,mod=1e9+7;
int C,T,n,k;
long long ans;
int cnt=1,vis[maxn];
struct ed{
	int xu,fla,fla2,i,j;
}a[maxn][maxn],b[maxn][maxn],c[maxn];
void dfs(int m,int m1){
	c[m].fla2=1;
	int u=0;
	vis[m]=m1;
	for(int i=1;i<=cnt;i++){
		if(b[m][i].fla==1&&c[i].fla2==0) {
			dfs(i,m);
		}
		 else if(c[i].fla2==1) u++;
		
	}
	if(c[m].xu<=u){
		if(m==m1){
	
			ans++;
			ans%=mod;
			return ;
		}
		else {
			dfs(m1,vis[m1]);
		}
	}
}
int main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	cin>>C>>T;
	while(T--){
		int e[maxn];
		memset(vis,0,sizeof vis);
		memset(c,0,sizeof c);
		memset(b,0,sizeof b);
		ans=0;
		cnt=1;
		cin>>n>>k;
		for(int i=1;i<n;i++){
			int u,v;
			cin>>u>>v;
			c[cnt].i=u;
			c[cnt].j=v;
			c[cnt].fla=1;
			cnt++;
		}
		for(int i=1;i<=cnt;i++){
			for(int j=1;j<=cnt;j++){
				if(c[i].j==c[j].i&&i!=j) b[i][j].fla=1,c[i].xu++,c[j].xu++;
				else if(c[i].i==c[j].i&&i!=j) b[i][j].fla=1,c[i].xu++,c[j].xu++;
			}
		}
		for(int i=1;i<=k;i++) {
			cin>>e[i];
			dfs(e[i],e[i]);
		}
		cout<<ans<<endl;
	}
	return 0;
}
