#include using namespace std; int read(){ int x;char c; while((c=getchar())<'0'||c>'9'); x=c^48; while((c=getchar())>='0'&&c<='9')x=(x<<3)+(x<<1)+(c^48); return x; } typedef long long LL; const LL mod=1000000007; LL Pow(LL x,LL y){ LL s=1; while(y){ if(y&1)s=s*x%mod; x=x*x%mod;y>>=1; } return s; } #define RI register int #define F(a,b,c) for(RI a=b,r=c;a<=r;a++) #define G(a,b,c) for(RI a=b,r=c;a>=r;a--) const int maxn=100020; vector> to[maxn]; int uv[maxn],d[maxn];LL anss,dv[maxn],dp[maxn][2]; void dfs(int p,int fa){ dp[p][0]=dp[p][1]=0; for(auto &i:to[p]) if(i.first!=fa){ dfs(i.first,p); LL x=dp[i.first][0],y=dp[i.first][1]; if(uv[i.second]){ anss+=x-y+1; x=y=(x+y)%mod;y++; } anss=(anss+dp[p][0]*y+dp[p][1]*x-dp[p][0]*x-dp[p][1]*y)%mod; dp[p][0]=(dp[p][0]+x*dv[p])%mod; dp[p][1]=(dp[p][1]+y*dv[p])%mod; } } void solve(){ int n=read(),m=read(),x,y; LL ans=1; F(i,1,n){ uv[i]=0;d[i]=0; to[i].clear(); } F(i,1,n-1){ x=read();y=read(); if(d[x])ans=ans*d[x]%mod; if(d[y])ans=ans*d[y]%mod; d[x]++;d[y]++; to[x].emplace_back(y,i); to[y].emplace_back(x,i); } F(i,1,m) uv[read()]=1; F(i,1,n) dv[i]=Pow(d[i]-1,mod-2); anss=0;dfs(1,-1); anss+=mod;anss%=mod; printf("%lld\n",anss*ans%mod); } int main(){ freopen("traverse.in","r",stdin); freopen("traverse.out","w",stdout); read(); int T=read(); while(T--) solve(); return 0; }