#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10,mod=1e9+7,base=131;
int c,T,n,k,cnt,a[N],b[N],ans;
bool vis[N];
vector<int> g[N],G[N];
map<pair<int,int>,int> m1;
map<int,pair<int,int>> m2;
map<long long,bool> m3;
void init()
{
	for(int i=1; i<=n; i++)g[i].clear(),G[i].clear();
	m1.clear(),m2.clear(),m3.clear();
}
void dfs(int u,int fa)
{
	for(int v:g[u])
	{
		if(v==fa)continue;
		int x=u,y=v;
		if(x>y)swap(x,y);
		int s1=m1[make_pair(x,y)];
		for(int w:g[v])
		{
			if(w==u)continue;
			int p=v,q=w;
			if(p>q)swap(p,q);
			int s2=m1[make_pair(p,q)];
			G[s1].emplace_back(s2),G[s2].emplace_back(s1);
		}
		for(int w:g[u])
		{
			if(w==fa||w==v)continue;
			int p=u,q=w;
			if(p>q)swap(p,q);
			int s2=m1[make_pair(p,q)];
			if(s1>s2)continue;
			G[s1].emplace_back(s2),G[s2].emplace_back(s1);
		}
		dfs(v,u);
	}
}
long long hs(int* a)
{
	long long res=1;
	for(int i=1; i<n; i++)res=(res*base+a[i])%mod;
	return res;
}
void dfs2(int u,int fa)
{
	b[++cnt]=u,vis[u]=1;
	if(cnt==n-1)
	{
		long long p=hs(b);
		if(!m3[p])ans=(ans+1)%mod,m3[p]=1;
		cnt--,vis[u]=0;
		return;
	}
	for(int v:G[u])
	{
		if(v==fa)continue;
		if(!vis[v])dfs2(v,u);
	}
	cnt--,vis[u]=0;
}
void solve1()
{
	ans=0;
	for(int i=1; i<=k; i++)dfs2(a[i],0);
	cout<<ans<<'\n';
}
int main()
{
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>c>>T;
	while(T--)
	{
		cin>>n>>k;
		init();
		for(int i=1; i<n; i++)
		{
			int u,v;
			cin>>u>>v;
			if(u>v)swap(u,v);
			g[u].emplace_back(v),g[v].emplace_back(u);
			m1[make_pair(u,v)]=i;
			m2[i]=make_pair(u,v);
		}
		dfs(1,0);
		for(int i=1; i<=k; i++)cin>>a[i];
		solve1();
	}
	return 0;
}
