#include using namespace std; #define int long long const int maxn=2e5+10; const int mod=1e9+7; const int i2=5e8+4; int id,t,n,k,x,y,fac[maxn],ok[maxn],ans,siz[maxn],deg[maxn],F[maxn],ifac[maxn],inv[maxn]; vector > v[maxn]; vector dots; int dp[maxn],ansf; inline int read() { int x=0;char ch=getchar(); while(ch<'0' || ch>'9')ch=getchar(); while(ch>='0' && ch<='9')x=x*10+ch-'0',ch=getchar(); return x; } inline void write(int x) { if(x>=10)write(x/10); putchar(x%10+'0'); } inline int calc(int n,int k) { if(n<=2)return 1; int all=fac[n]*i2%mod; int bad=(n-k)*(n-k-1)%mod*i2%mod*fac[n-2]%mod; return (all-bad); } inline void dfs(int x,int fa) { F[x]=fa;siz[x]=0; int cnt=0; for(int i=0;i=2)dots.push_back(x); } inline int qpow(int a,int b) { int res=1; while(b) { if(b&1)res=res*a%mod; a=a*a%mod; b>>=1; } return res; } inline void Sub1() { int res=1; for(int i=1;i<=n;i++)res=res*fac[deg[i]-1]%mod; write(res);putchar('\n'); } inline void Sub2() { int res=1,tmp=1; for(int i=1;i<=n;i++)tmp=tmp*fac[deg[i]-1]%mod; dots.clear();dfs(1,0); int del=tmp; for(int i=0;i=1;i--)ifac[i]=ifac[i+1]*(i+1)%mod; for(int i=1;i=19 && id<=21) { int ans=calc(n-1,k);ans=(ans%mod+mod)%mod; write(ans);putchar('\n');continue; }*/ Sub3(); } return 0; }