#include #define lowbit(x) (x&(-x)) using namespace std; typedef long long ll; typedef long double LD; typedef pair pii; typedef pair pll; const ll MOD=1e9+7; const ll INF=0x3f3f3f3f3f3f3f3f; const LD eps=1e-9; void file() { freopen("traverse.in","r",stdin); freopen("traverse.out","w",stdout); return ; } inline ll read() { ll x=0, f=1; char c=getchar(); while(c<'0'||c>'9') { if(c=='-') f=-1; c=getchar(); } while(c>='0'&&c<='9') x=x*10+c-'0', c=getchar(); return x*f; } inline ll qpow(ll x,ll y) { ll res=1; while(y) { if(y&1) res=(res*x)%MOD; y>>=1; x=(x*x)%MOD; } return res; } ll id, TTT; const int N=1e5+500; int last[N], nect[N<<1], to[N<<1]; int xnt=1; int in[N]; ll siz[N], val[N]; int fa[N]; ll fac[N+500], inv[N+500]; ll res; bool tag[N]; int n, m; ll P; inline void add(int x,int y) { to[++xnt]=y; nect[xnt]=last[x]; last[x]=xnt; return ; } void iinit() { fac[0]=inv[0]=1; for(int i=1;i<=N;i++) fac[i]=(fac[i-1]*i)%MOD; for(int i=1;i<=N;i++) inv[i]=qpow(i,MOD-2); return ; } void init() { memset(last,0,sizeof(last)); memset(tag,0,sizeof(tag)); memset(in,0,sizeof(in)); memset(siz,0,sizeof(siz)); memset(val,0,sizeof(val)); memset(fa,0,sizeof(fa)); xnt=1; res=1; n=read(), m=read(); int a, b; for(int i=1;i