#include #define int long long using namespace std; inline int read(){ int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9'){ x=x*10+ch-48; ch=getchar(); } return x*f; } inline void print(int x){ static int s[55],t=0; do s[++t]=x%10,x/=10;while(x); while(t) putchar(s[t--] + '0'); } int n; const int MOD=1e9+7; int ksm(int a,int b){ int res=1; while(b){ if(b&1){ res=res*a%MOD; } a=a*a%MOD; b>>=1; } return res; } int fm(int x){ return ksm(x,MOD-2); } int solve(int n){ if(n>=MOD){ return 0; } if(n<=1e7){ int ans=1; for(int i=1;i<=n;i++){ ans=(ans*i)%MOD; } return ans; } long long blockSize=31623; long long blockFact=1; for(long long i=1;i<=blockSize;i++){ blockFact=blockFact*i%MOD; } long long res=1; long long numBlocks=n/blockSize; for(long long i=0;i