// Author: InfiniteStarlight #include using namespace std; #define pb emplace_back #define mp make_pair #define ALL(v) (v).begin(),(v).end() #define rALL(v) (v).rbegin(),(v).rend() #define srt(v) sort(ALL(v)) #define rsrt(v) sort(rALL(v)) #define rev(v) reverse(ALL(v)) #define uni(v) (v).resize(unique(ALL(v))-(v).begin()) #define inf 0x3f3f3f3f #define lb(v,x) (int)((lower_bound(ALL(v),x))-(v).begin()) #define ub(v,x) (int)((upper_bound(ALL(v),x))-(v).begin()) #define sz(v) (int)((v).size()) using ll=long long; using ull=unsigned long long; using ld=long double; using db=double; using pii=pair; const ll mod=1e9+7; int n; vector G[100100]; int u[100100],v[100100]; int flag[100100]; int d[100100]; void dfs(int u,int fa) { d[u]=d[fa]+1; for(auto v:G[u]) if(v!=fa) dfs(v,u); } ll ans,ans2; ll f[100100]; ll inv[100100]; int deg[100100]; void dfs2(int u,int fa) { f[u]=0; for(auto v:G[u]) if(v!=fa) dfs2(v,u); ll s=0; for(auto v:G[u]) if(v!=fa) { ans2=(ans2+s*f[v])%mod; s=(s+f[v]*(deg[u]-1))%mod; } if(flag[u]) { f[u]=(f[u]+mod-inv[deg[fa]-1])%mod; for(auto v:G[u]) if(v!=fa) ans2=(ans2+mod-f[v])%mod; } else { for(auto v:G[u]) if(v!=fa) f[u]=(f[u]+f[v]*inv[deg[fa]-1])%mod; } } int main() { freopen("traverse.in","r",stdin); freopen("traverse.out","w",stdout); ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); inv[1]=1; for(int i=2;i<100100;i++) inv[i]=(mod-mod/i)*inv[mod%i]%mod; int c,t; cin>>c>>t; while(t--) { cin>>n; int k; cin>>k; for(int i=1;i<=n;i++) { G[i].clear(); flag[i]=0; } for(int i=1;i>u[i]>>v[i]; G[u[i]].pb(v[i]); G[v[i]].pb(u[i]); } dfs(1,0); for(int i=1;i<=k;i++) { int ind; cin>>ind; int a=u[ind]; int b=v[ind]; if(d[a]>d[b]) flag[a]=1; else flag[b]=1; } ans=1; for(int i=1;i<=n;i++) deg[i]=sz(G[i]); for(int i=1;i<=n;i++) for(int j=1;j