#include<bits/stdc++.h>
using namespace std;
int c,T,n,k,tot,num,mod=1e9+7;
struct pp
{
	int q,z;
}a[500005];
struct p1
{
	int q,z;
}b[500005];
int vis[500005],head[500005];
void add(int x,int y){
	b[++tot].z=y;
	b[tot].q=head[x];
	head[x]=tot;
}
void dfs(int x,int q,int h)
{
	if(h==n-1)
	{
		num++;
		return ;
	}
	int flag=0;
	for(int i=head[x];i;i=b[i].q)
	{
		int t=b[i].z;
		if(vis[t])   continue;
		flag=1;
		vis[t]=1;
		dfs(t,x,h+1);
		vis[t]=0;
	}
	return;
}
int main(){
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	cin>>c>>T;
	while(T--){
		int flag=1;
		cin>>n>>k;
		for(int i=1;i<n;i++){
			int x,y;
			cin>>x>>y;
			if(x!=y+1)
			{
			    flag=0;
			}
			a[i].q=x;
			a[i].z=y;
		}
		if(flag)
		{
			cout<<k<<endl;
			continue;
		}
		for(int i=1;i<n;i++){
			for(int j=i+1;j<n;j++){
				if(a[i].q==a[j].z||a[i].z==a[j].q||a[i].q==a[j].q||a[i].z==a[j].z){
					add(i,j);
					add(j,i);
				}
			}
		}
		for(int i=1;i<=k;i++)
		{
			memset(vis,0,sizeof(vis));
			int x;
			cin>>x;
			vis[x]=1;
			dfs(x,x,1);
			num%=mod;
		}
		cout<<num<<endl;
	}
	return 0;
}
