#include using namespace std; int waste,T; int n,k; int vis[100005]; vector >v[100005]; int jc[100005]; int ny[100005]; int ans; int f[100005]; const int N=1e9+7; int inline ksm(int x,int c) { int re=1; while(c>0) { if(c&1) { re=1LL*x*re%N; re%=N; } x=1LL*x*x%N; c>>=1; } return re; } void dfs(int x,int father,int flag) { for(auto xx:v[x]) { if(xx.first==father) continue; dfs(xx.first,x,vis[xx.second]); ans-=1LL*f[xx.first]*f[x]%N*ny[v[x].size()-1]%N; ans+=N; ans%=N; f[x]+=f[xx.first]; f[x]%=N; } f[x]=1LL*f[x]*ny[v[x].size()-1]%N; if(flag) { ans-=f[x]; ans+=N; ans%=N; f[x]=1; } } signed main() { freopen("traverse.in","r",stdin); freopen("traverse.out","w",stdout); ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); jc[0]=1; ny[0]=1; for(int i=1;i<=100000;i++) { jc[i]=1LL*jc[i-1]*i%N; ny[i]=ksm(i,N-2); } cin>>waste>>T; while(T--) { cin>>n>>k; for(int i=1;i<=n;i++) { v[i].clear(); vis[i]=0; f[i]=0; } int s,t; for(int i=1;i>s>>t; v[s].push_back(make_pair(t,i)); v[t].push_back(make_pair(s,i)); } int x; for(int i=1;i<=k;i++) { cin>>x; vis[x]=1; } ans=k; dfs(1,0,0); for(int i=1;i<=n;i++) { ans=1LL*ans*jc[v[i].size()-1]%N; } cout<