#include #define int long long using namespace std; const int mod=1000000007; int T,n,cid,e[100005],m,jc[100005],ans,p1,p2,inv[100005],t[100005]; vector >v[100005]; int dfs(int x,int l,int sp){ int sm=0,ml=inv[(int)(v[x].size())-1]; for(auto i:v[x]){ int a=i.first,b=i.second; if(a==l)continue; t[a]=dfs(a,x,e[b]); // if(e[b])t[a]=1; (sm+=t[a])%=mod; } for(auto i:v[x]){ int a=i.first,b=i.second; if(a==l)continue; (p2+=(sm-t[a]+mod)*t[a]%mod*ml)%=mod; } if(!sp) return (sm*ml)%mod; else{ (p2+=sm*ml*2)%=mod; return 1; } } // void dfs(int x,int y,int l,int s){ // (y*=inv[((int)v[x].size()-1)])%=mod; // if(y==0){ // for(auto i:v[x]){ // int a=i.first,b=i.second; // if(e[b]){ // dfs(a,1,x,s); // } // } // } // else{ // for(auto i:v[x]){ // int a=i.first,b=i.second; // if(a==l)continue; // if(e[b]){ // (p2+=y*(s==1?1:-1))%=mod; // } // else dfs(a,y,x,s^e[b]); // } // } // } signed main(){ freopen("traverse.in","r",stdin); freopen("traverse.out","w",stdout); ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); cin>>cid>>T; while(T--){ int tg=0;ans=1; cin>>n>>m; inv[0]=inv[1]=1; for(int i=2;i<=n;i++)inv[i]=(mod-mod/i)*inv[mod%i]%mod; for(int i=1;i<=n;i++)t[i]=0,v[i].clear(),e[i]=0; for(int i=1;i>x>>y; v[x].push_back({y,i}); v[y].push_back({x,i}); } for(int i=1;i<=m;i++){ int x;cin>>x; e[x]=1; } p1=1,p2=0; jc[0]=1; for(int i=1;i<=n;i++)jc[i]=(jc[i-1]*i)%mod; for(int i=1;i<=n;i++){ int p=v[i].size(); (p1*=jc[p-1])%=mod; } // for(int i=1;i<=n;i++){ // int p=v[i].size(),c=0; // (p1*=jc[p-1])%=mod; // for(auto j:v[i])c+=e[j]; // int sum=(c*jc[p-1]%mod-(c*(c-1)/2)%mod*jc[p-2]%mod+mod)%mod; // (ans*=sum)%=mod; // } dfs(1,0,0); // for(int i=1;i<=n;i++){ // dfs(i,0,0,1); // } (p2+=mod)%=mod; // cout<