#include<bits/stdc++.h>
#define int long long
using namespace std;
const int mod=1e9+7;
const int N=1e5+10;
int h[N],fr[N<<1],to[N<<1],ne[N<<1];
int fac[N];
bool vi[N<<1];
int OP,t,n,k,cnt,ans;
void ad(int u,int v)
{
	to[++cnt]=v;
	fr[cnt]=u;
	ne[cnt]=h[u];
	h[u]=cnt;
}
int dfs(int e)
{
	int res=1,u=fr[e<<1];
	for(int i=h[u];i;i=ne[i])
	{
		if(vi[i])
		{
			continue;
		}
		vi[i]=vi[i^1]=1;
		res=res+dfs(i)%mod;
		vi[i]=vi[i^1]=0;
	}
	u=to[e<<1];
	for(int i=h[u];i;i=ne[i])
	{
		if(vi[i])
		{
			continue;
		}
		vi[i]=vi[i^1]=1;
		res=res+dfs(i)%mod;
		vi[i]=vi[i^1]=0;
	}
	return res;
}
signed main()
{
	freopen("traverse.in","r",stdin);
	freopen("traverse.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	cin>>OP>>t;
	if(OP==18)
	{
		while(t--)
		{
			cin>>n>>k;
			for(int i=1,u,v;i<n;++i)
			{
				cin>>u>>v;
			}
			while(k--)
			{
				int x;
				cin>>x;
				cout<<"1\n";
			}
		}
		return 0;
	}
//	if(OP>=19&&OP<=21)
//	{
//		fac[0]=1;
//		for(int i=1;i<N;++i)
//		{
//			fac[i]=fac[i-1]*i%mod;
//		}
//		while(t--)
//		{
//			cin>>n>>k;
//			for(int i=1,u,v;i<n;++i)
//			{
//				cin>>u>>v;
//			}
//			for(int i=1;i<=k;++i)
//			{
//				int x;
//				cin>>x;
//			}
//			cout<<(k*fac[n-1]%mod-k*(k-1)/2%mod*fac[n-2]%mod+mod)%mod<<"\n";
//		}
//		return 0;
//	}
	while(t--)
	{
		ans=0;
		cnt=1;
		cin>>n>>k;
		for(int i=1;i<=n;++i)
		{
			h[i]=0;
		}
		for(int i=1,u,v;i<n;++i)
		{
			cin>>u>>v;
			ad(u,v);
			ad(v,u);
		}
		while(k--)
		{
			int x;
			cin>>x;
			vi[x]=vi[x^1]=1;
			ans=ans+dfs(x);
			ans%=mod;
//			cout<<dfs(x)<<"\n";
			vi[x]=vi[x^1]=0;
		}
		cout<<ans<<"\n";
	}
}
