#include #define IL inline #define reg register #define N 100100 #define mod 1000000007 IL int read() { reg int x=0,f=0; reg char ch=getchar(); while(ch<'0'||ch>'9')f|=ch=='-',ch=getchar(); while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return f?-x:x; } IL int Add(reg int x,reg int y){return x+yG[N]; IL void add(reg int u,reg int v){G[u].push_back(v),G[v].push_back(u);} struct Edge{int u,v;}e[N]; bool vis[N],key[N]; void dfs0(reg int u) { dep[u]=dep[fa[u]]+1; for(auto v:G[u])if(v!=fa[u]) fa[v]=u,dfs0(v); } int ans,con,f[N][2]; void dfs1(reg int u) { f[u][0]=f[u][1]=0; if(d[u]==1) { f[u][key[u]]=1; return; } for(auto v:G[u])if(v!=fa[u]) { dfs1(v); for(reg int i=0,j;i<2;++i)for(j=0;j<2;++j) if(i||j)Pls(ans,Mul(f[u][i],f[v][j])); for(reg int i=0;i<2;++i)Pls(f[u][i],Mul(inv[d[u]-1],f[v][i])); } if(key[u])Pls(f[u][1],f[u][0]),f[u][0]=0; } IL void work() { n=read(),m=read(); for(reg int i=1;i<=n;++i)G[i].clear(),vis[i]=key[i]=0; for(reg int i=1;i