#include//0xnnb using namespace std; typedef long long ll; typedef double db; typedef unsigned long long ull; int read(){ int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=-1; ch=getchar(); } while(ch>='0'&&ch<='9'){ x=x*10+ch-'0'; ch=getchar(); } return x*f; } const int N=100005; const ll mod=1e9+7; int c,T,n,k,ee,vex[N],a[N],degg[N]; ll dp[N],invv[N],f[N],g[N],fac[N]; bool fww[N]; struct Node{ int u,v,next; bool w; }e[N*2]; void add(int u,int v){ degg[u]++; e[++ee].u=u,e[ee].v=v,e[ee].w=0; e[ee].next=vex[u],vex[u]=ee; } void init(){ int n=100000; fac[0]=1; for(int i=1;i<=n;i++){ fac[i]=fac[i-1]*i%mod; } } ll ksm(ll a,ll b){ ll s=1; while(b){ if(b&1)s=s*a%mod; a=a*a%mod; b>>=1; } return s; } void dfs1(int u,int fa){ dp[u]=fac[degg[u]-1]; for(int i=vex[u];i;i=e[i].next){ int v=e[i].v; bool w=e[i].w; if(v==fa)continue; fww[v]=w; dfs1(v,u); dp[u]=dp[u]*dp[v]%mod; } invv[u]=ksm(dp[u],mod-2); } void dfs2(int u,int fa){ ll sum=1; for(int i=vex[u];i;i=e[i].next){ int v=e[i].v; if(v==fa)continue; dfs2(v,u); sum=sum*dp[v]%mod; } ll num1=0,num2=0; for(int i=vex[u];i;i=e[i].next){ int v=e[i].v; if(v==fa)continue; f[u]=(f[u]+f[v]*sum%mod*invv[v]%mod*fac[degg[u]-1]%mod)%mod; if(degg[u]>=2){ g[u]=(g[u]+g[v]*sum%mod*invv[v]%mod*fac[degg[u]-2]%mod)%mod; num2=(num2+num1*g[v]%mod*sum%mod*invv[v]%mod*fac[degg[u]-2]%mod)%mod; num1=(num1+g[v]*invv[v]%mod)%mod; } } f[u]=(f[u]-num2+mod)%mod; if(fww[u]){ f[u]=(f[u]+dp[u]-g[u]+mod)%mod; g[u]=dp[u]; } } void solve(){ for(int i=1;i<=k;i++){ int x=a[i]; e[x*2-1].w=e[x*2].w=1; } dfs1(1,0); dfs2(1,0); printf("%lld\n",f[1]); } void clear(){ for(int i=1;i<=n;i++){ vex[i]=degg[i]=dp[i]=invv[i]=f[i]=g[i]=fww[i]=0; } ee=0; } int main(){ freopen("traverse.in","r",stdin); freopen("traverse.out","w",stdout); c=read(),T=read(); init(); while(T--){ n=read(),k=read(); for(int i=1;i