#include const int N=1e5,mod=1e9+7; int read(){ char c=getchar();int x=0; while(c<'0'||c>'9')c=getchar(); while(c>='0'&&c<='9')x=(x<<1)+(x<<3)+(c^48),c=getchar(); return x; } int nnn=0; int n,m,first[N+5],to[N*2+5],nxt[N*2+5],num,vis[N*2+5],d[N+5],f[N+5],ans,jc[N+5],g[N+5],inv[N+5],ivg[N+5]; void add(int x,int y){to[++num]=y,nxt[num]=first[x],first[x]=num,++d[x];} void clean(){ for(int i=1;i<=n;++i)d[i]=0,first[i]=f[i]=ivg[i]=g[i]=0; for(int i=1;i<=num;++i)vis[i]=0; num=1; ans=0; }//clean!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! int fa[N+5]; void dfs(int x,int y){ fa[x]=y; g[x]=jc[d[x]-1],ivg[x]=inv[d[x]-1]; for(int i=first[x];i;i=nxt[i])if(to[i]!=y){ dfs(to[i],x); g[x]=1ll*g[x]*g[to[i]]%mod; ivg[x]=1ll*ivg[x]*ivg[to[i]]%mod; if(vis[i])f[x]=(f[x]+1)%mod; else f[x]=(f[x]+1ll*f[to[i]]*ivg[to[i]])%mod; } f[x]=1ll*f[x]*g[x]%mod; f[x]=1ll*f[x]*(d[x]>=2?1ll*inv[d[x]-1]*jc[d[x]-2]%mod:0)%mod; } void dfs2(int x,int y,int s){ for(int i=first[x];i;i=nxt[i])if(to[i]!=y){ //if(nnn==4&&x==8216)printf("%d %d %lld\n",x,to[i],1ll*f[to[i]]*g[1]%mod*ivg[to[i]]%mod); if(vis[i]){ //if(nnn==4)printf("%d %d %d %d\n",x,to[i],d[x],s); ans=(ans+g[1])%mod; //printf("%d\n",ans); ans=(ans-(d[x]>=2?1ll*s*inv[d[x]-1]%mod*jc[d[x]-2]%mod:0)+mod)%mod; dfs2(to[i],x,g[1]); s=(s+g[1])%mod; } else{ dfs2(to[i],x,d[x]>=2?1ll*s*inv[d[x]-1]%mod*jc[d[x]-2]%mod:0); s=(s+1ll*f[to[i]]*g[1]%mod*ivg[to[i]]%mod)%mod; } } } void work(){ n=read(),m=read(); for(int i=1,u,v;i