#include #define N 110000 #define MOD 1000000007 using namespace std; int c,T,n,k,dp[N][3],mark[N],fac[N]; vector>v[N]; int qpow(int a,int b){ int ans=1; while(b){ if(b&1)ans=1ll*ans*a%MOD; a=1ll*a*a%MOD; b>>=1; } return ans; } void dfs(int x,int fid){ if(v[x].size()==1){ dp[x][0]=1; dp[x][1]=dp[x][2]=mark[fid]; return; } int prod=1; for(auto [to,id]:v[x]){ if(id==fid)continue; dfs(to,id); prod=1ll*prod*dp[to][0]%MOD; } dp[x][0]=1ll*prod*fac[v[x].size()-1]%MOD; if(mark[fid]){ dp[x][1]=dp[x][2]=dp[x][0]; prod=1; int sum=0; for(auto [to,id]:v[x]){ if(id==fid)continue; sum=1ll*sum*dp[to][0]%MOD; sum=(sum+1ll*prod*fac[v[x].size()-2]%MOD*(dp[to][1]-dp[to][2]+MOD))%MOD; // cerr<<"sum="<sync_with_stdio(0); cin>>c>>T; while(T--){ cin>>n>>k; fac[0]=1; for(int i=1;i<=n;i++)fac[i]=1ll*fac[i-1]*i%MOD; memset(dp,0,sizeof(dp)); memset(mark,0,sizeof(mark)); for(int i=1;i<=n;i++)v[i].clear(); for(int i=1;i>a>>b; v[a].push_back({b,i}); v[b].push_back({a,i}); } for(int i=1;i<=k;i++){ int x; cin>>x; mark[x]=1; } for(int i=1;i<=n;i++){ if(v[i].size()==1){ for(auto [to,id]:v[i]){ dfs(to,id); cout<