#include #include #include using namespace std; #define N 100010 #define int long long #define mod 1000000007 int c,t,n,k,u[N],v[N],vis[N],fac[N],allqwq,ans; int f[N][2]; vector > g[N]; vector tmp[N]; int ksm(int a,int k) { int res=1; while(k) { if(k&1) res=res*a%mod; a=a*a%mod; k>>=1; } return res; } void dfs(int u,int fa) { if(g[u].size()==1&&fa) { f[u][0]=1; return; } int ivvv=ksm(g[u].size()-1,mod-2); for(pair nv:g[u]) { int v=nv.first,id=nv.second; if(v==fa) continue; dfs(v,u); if(vis[id]) { f[v][1]=(f[v][1]+f[v][0])%mod; f[v][0]=0; } ans=(ans+(f[u][0]*f[v][1]+f[u][1]*(f[v][0]+f[v][1]))%mod*ivvv)%mod; f[u][0]=(f[u][0]+f[v][0])%mod; f[u][1]=(f[u][1]+f[v][1])%mod; } f[u][0]=f[u][0]*ivvv%mod; f[u][1]=f[u][1]*ivvv%mod; } signed main() { freopen("traverse.in","r",stdin); freopen("traverse.out","w",stdout); fac[0]=1; for(int i=1;i>c>>t; while(t--) { cin>>n>>k; for(int i=1;i<=n;i++) { f[i][0]=f[i][1]=0; g[i].clear(); } for(int i=1;i<=n-1;i++) { vis[i]=0; } ans=0; for(int i=1;i<=n-1;i++) { cin>>u[i]>>v[i]; g[u[i]].push_back(make_pair(v[i],i)); g[v[i]].push_back(make_pair(u[i],i)); } int x=0; for(int i=1;i<=k;i++) { cin>>x; vis[x]=1; } allqwq=1; for(int i=1;i<=n;i++) allqwq=allqwq*fac[g[i].size()-1]%mod; bool fl=0; for(int i=1;i<=n;i++) if(g[i].size()>1) { dfs(i,0); fl=1; break; } if(!fl) { cout<<1<<"\n"; continue; } cout<