#include using namespace std; using ll=long long; template using vc=vector; inline int read() { int s=0,w=1;char ch; while((ch=getchar())>'9'||ch<'0') if(ch=='-') w=-1; while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar(); return s*w; } inline ll lread() { ll s=0,w=1;char ch; while((ch=getchar())>'9'||ch<'0') if(ch=='-') w=-1; while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar(); return s*w; } const int mod=1000000007; vcg[100005]; vcw[100005]; bool is[100005]; ll jc[100005]; ll inv[100005]; int fa[100005]; ll dp[100005]; int n,m; ll ans,V; inline void clear() { for(int i=1;i<=n;i++) g[i].clear(),w[i].clear(); } inline ll qow(ll a,ll b) { ll ans=1; while(b) { if(b&1) ans=ans*a%mod; a=a*a%mod; b>>=1; } return ans; } void dfs(int num) { //dp[num] ll sum=0;dp[num]=0; for(unsigned i=0;i=2) { ll val=sum*t%mod; val=val*inv[g[num].size()-1]%mod; val=val*jc[g[num].size()-2]%mod; ans=(ans+val)%mod; } (sum+=t)%=mod; } if(g[num].size()>1) { dp[num]=dp[num]*inv[g[num].size()-1]%mod; dp[num]=dp[num]*jc[g[num].size()-2]%mod; } // printf("dp[%d]=%lld\n",num,dp[num]); } inline void solve() { n=read(),m=read(),jc[0]=inv[0]=1; for(int i=1;i