#include #include #include #include #include #include #define ll long long #define db double using namespace std; const int inf=0x3f3f3f3f; const ll lnf=1e18+10; const db eps=1e-6; ll read() { ll o=0,w=1;char c=getchar(); while(c<'0'||c>'9') {if(c=='-') w=-1;c=getchar();} while(c>='0'&&c<='9') {o=o*10+c-'0';c=getchar();} return o*w; } namespace dada { const int N=1e5+10; const ll P=1e9+7; int n,m,U[N],V[N]; vector e[N]; int Fa[N],up[N]; ll sumall,dp[N],Ans; ll fac[N],finv[N]; ll qpow(ll x,ll k) { ll ans=1; while(k) { if(k&1) ans=ans*x%P; x=x*x%P; k/=2; } return ans; } void dfs1(int x,int fa) { // cerr<1? finv[e[x].size()-1]*fac[e[x].size()-2]%P:0); for(int v:e[x]) if(v!=fa) { dfs2(v,x); if(sum) Ans=(Ans-dp[v]*sum%P*tmp%P*sumall%P+P)%P; sum=(sum+dp[v])%P; } if(up[x]) { dp[x]=1; Ans=(Ans-sum*tmp%P*sumall%P+P)%P; } else { dp[x]=sum*tmp%P; } } int Main() { n=read(),m=read(); for(int i=1;i=0;i--) finv[i]=finv[i+1]*(i+1)%P; sumall=1; for(int i=1;i<=n;i++) sumall=sumall*fac[e[i].size()-1]%P; Ans=sumall*m%P; // cerr<