int Fac[N+10],Iac[N+10]; inlinevoidInit(){ Fac[0]=Iac[0]=1; for(REG int i=1;i<=n;++i) Fac[i]=1ll*Fac[i-1]*i%Mod; Iac[n]=Pow(Fac[n],Mod-2); for(REG int i=n-1;i;--i) Iac[i]=1ll*Iac[i+1]*(i+1)%Mod; }
inlinevoidWork(){ read(n); if(n==1||n==2) return (void)puts("1"); Init(); intAns(0); for(REG int k=2;k<=n-2;++k){ int tmp=Pow(k,n-k); Add(tmp,Mod-2ll*Pow(k-1,n-k)%Mod),Add(tmp,Pow(k-2,n-k)); tmp=1ll*tmp*Iac[n-k]%Mod; Add(Ans,tmp); } Ans=1ll*Ans*_%Mod*Fac[n]%Mod; Add(Ans,n); printf("%d\n",Ans); }