#include #define rep(i,n) for(int i=0,del##i##verme=int(n);i=0;--i) #define per1(i,n) for(int i=int(n);i>=1;--i) #define pb push_back #define mp make_pair #define fi first #define se second #define y0 LingLuo #define y1 VividCycle using namespace std; typedef long long ll; typedef unsigned long long ull; typedef long double ldb; const ll mod2=1000000007; int c,t,n,k,u[100005],v[100005],pr[100005]; vector > con[100005]; bool tag[100005]; ll fac[200005]; ll f[100005],g[100005],h[100005]; ll iv[200005]; int deg[100005]; ll mult; void solve(int ver,int par) { g[ver]=0;h[ver]=0; ll tot2=0; for(pair P:con[ver]) { int x=P.fi;if(x==par) continue; solve(x,ver); bool black=tag[P.se]; ll cur=0; if(black) cur=1; else cur=g[x]; g[ver]+=cur; h[ver]+=h[x]; if(black) h[ver]+=g[x]; tot2=(tot2+cur*cur)%mod2; } g[ver]%=mod2; h[ver]%=mod2; ll value=(g[ver]*g[ver]-tot2+mod2)%mod2*((mod2+1)/2)%mod2; h[ver]=(h[ver]+f[ver]*value)%mod2; g[ver]=g[ver]*f[ver]%mod2; // cout<>n>>k;rep1(i,n)con[i].clear(); rep1(i,n-1) { cin>>u[i]>>v[i];con[u[i]].pb(mp(v[i],i));con[v[i]].pb(mp(u[i],i)); tag[i]=false; } rep1(i,k) { cin>>pr[i]; tag[pr[i]]=true; } rep1(i,n) deg[i]=int(con[i].size()); mult=1; rep1(i,n) { mult=mult*fac[deg[i]-1]%mod2; f[i]=iv[deg[i]-1]; } solve(1,0); // assert(k==1); ll ret=(k+mod2-h[1])*mult%mod2; cout<>c>>t; fac[0]=1;rep1(i,200000)fac[i]=fac[i-1]*i%mod2; iv[1]=1;for(int i=2;i<=200000;++i) iv[i]=mod2-mod2/i*iv[mod2%i]%mod2; while(t--)Q(); return 0; } /* 妄想着我们还好 想着我还很好 妄想故事不曾有过悲伤走向 --- 绝世丑角 */