#include using namespace std; const int N=1e5+5,P=1e9+7; char buf[1<<23],*p1=buf,*p2=buf; #define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<23,stdin),p1==p2)?EOF:*p1++) template void read(rd &x){ char c=getchar(); for(;c<48||c>57;c=getchar()); for(x=0;c>47&&c<58;c=getchar())x=(x<<1)+(x<<3)+(c^48); } int T,tid,n,q,d[N],fac[N],inv[N],a[N],ans,all,f[N]; bool key[N],vis[N]; vector >e[N]; inline void Add(int &x,int y){ if((x+=y)>=P)x-=P; } void dfs(int x,int y){ f[x]=0,vis[x]=true; int w=0; if(d[x]>1)w=1ll*inv[d[x]-1]*fac[d[x]-2]%P; for(auto [z,i]:e[x])if(z!=y){ if(key[i]){ Add(ans,1ll*f[x]*(P-w)%P); Add(f[x],1); }else{ dfs(z,x); Add(ans,1ll*f[x]*f[z]%P*(P-w)%P); Add(f[x],f[z]); } } f[x]=1ll*f[x]*w%P; } void solve(){ read(n),read(q); for(int i=1;i<=n;++i)e[i].clear(),d[i]=key[i]=vis[i]=0; for(int i=1,x,y;i