#include<bits/stdc++.h>
#define ll long long int
#define maxN 10000001
#define mod1 186583 //186583*587117 = 109546051211
#define mod2 587117
using namespace std;
ll fact1[maxN];
ll fact2[maxN];
ll power(ll base,ll expo, ll mod) //fast exponentiation
{
ll ans=1;
while(expo)
{
if(expo&1)
ans=(ans*base)%mod;
expo/=2;
base=(base*base)%mod;
}
return ans;
}
ll inv(ll x,ll m) //calculating inverse using fermat's little theorem
{
return(power(x,m-2,m));
}
int main()
{
fact1[0]=fact1[1]=fact2[0]=fact2[1]=1;
for(ll i=2;i<587117;i++) //precomputing factorials till 587117 as after that the factorials will be divisible by 109546051211
{
fact1[i]=(i*fact1[i-1])%mod1;
fact2[i]=(i*fact2[i-1])%mod2;
}
ll n;
cin>>n;
if(n>=587117) //if n>=587117 then ans will always be 0
{
cout<<0<<endl;
return 0;
}
ll r1=1,r2=1;
for(ll i=2;i<=n;i++)
{
r1=(r1*fact1[i])%mod1; //calculating remainder under 186583
r2=(r2*fact2[i])%mod2; //calculating remainder under 587117
}
ll res=0;
res+=(((mod2*inv(mod2,mod1))%mod1)*r1)%mod1; // applying CRT formula (prod/a[i])*inv(prod/a[i])*remainder
res+=(((mod1*inv(mod1,mod2))%mod2)*r2)%mod2; //applying CRT formula (prod/a[i])*inv(prod/a[i])*remainder
cout<<(res)<<endl;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBsbCBsb25nIGxvbmcgaW50CiNkZWZpbmUgbWF4TiAxMDAwMDAwMQojZGVmaW5lIG1vZDEgMTg2NTgzICAgICAgICAgICAgICAgICAgICAgLy8xODY1ODMqNTg3MTE3ID0gMTA5NTQ2MDUxMjExCiNkZWZpbmUgbW9kMiA1ODcxMTcKCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpsbCBmYWN0MVttYXhOXTsKbGwgZmFjdDJbbWF4Tl07CgoKbGwgcG93ZXIobGwgYmFzZSxsbCBleHBvLCBsbCBtb2QpICAgICAgIC8vZmFzdCBleHBvbmVudGlhdGlvbgp7CiAgICBsbCBhbnM9MTsKICAgIHdoaWxlKGV4cG8pCiAgICB7CiAgICAgICAgaWYoZXhwbyYxKQogICAgICAgICAgICBhbnM9KGFucypiYXNlKSVtb2Q7CiAgICAgICAgZXhwby89MjsKICAgICAgICBiYXNlPShiYXNlKmJhc2UpJW1vZDsKICAgIH0KICAgIHJldHVybiBhbnM7Cn0KCgpsbCBpbnYobGwgeCxsbCBtKSAgICAgICAgICAgICAgIC8vY2FsY3VsYXRpbmcgaW52ZXJzZSB1c2luZyBmZXJtYXQncyBsaXR0bGUgdGhlb3JlbQp7CiAgICByZXR1cm4ocG93ZXIoeCxtLTIsbSkpOwp9CgoKaW50IG1haW4oKQp7CiAgICBmYWN0MVswXT1mYWN0MVsxXT1mYWN0MlswXT1mYWN0MlsxXT0xOwogICAgCiAgICBmb3IobGwgaT0yO2k8NTg3MTE3O2krKykgICAgICAgICAgICAgICAgICAgLy9wcmVjb21wdXRpbmcgZmFjdG9yaWFscyB0aWxsIDU4NzExNyBhcyBhZnRlciB0aGF0IHRoZSBmYWN0b3JpYWxzIHdpbGwgYmUgZGl2aXNpYmxlIGJ5IDEwOTU0NjA1MTIxMQogICAgewogICAgICAgIGZhY3QxW2ldPShpKmZhY3QxW2ktMV0pJW1vZDE7CiAgICAgICAgZmFjdDJbaV09KGkqZmFjdDJbaS0xXSklbW9kMjsKICAgIH0KICAgIAogICAgbGwgbjsKICAgIGNpbj4+bjsKICAgIAogICAgaWYobj49NTg3MTE3KSAgICAgICAgICAgICAgICAgICAgICAgLy9pZiBuPj01ODcxMTcgdGhlbiBhbnMgd2lsbCBhbHdheXMgYmUgMAogICAgewogICAgICAgIGNvdXQ8PDA8PGVuZGw7CiAgICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICAKICAgIGxsIHIxPTEscjI9MTsKICAgIAogICAgZm9yKGxsIGk9MjtpPD1uO2krKykKICAgIHsKICAgICAgICByMT0ocjEqZmFjdDFbaV0pJW1vZDE7ICAgICAgICAgIC8vY2FsY3VsYXRpbmcgcmVtYWluZGVyIHVuZGVyIDE4NjU4MwogICAgICAgIHIyPShyMipmYWN0MltpXSklbW9kMjsgICAgICAgICAgLy9jYWxjdWxhdGluZyByZW1haW5kZXIgdW5kZXIgNTg3MTE3CiAgICB9CiAgICAKICAgIGxsIHJlcz0wOwogICAgCiAgICByZXMrPSgoKG1vZDIqaW52KG1vZDIsbW9kMSkpJW1vZDEpKnIxKSVtb2QxOyAgICAgICAgLy8gYXBwbHlpbmcgQ1JUIGZvcm11bGEgKHByb2QvYVtpXSkqaW52KHByb2QvYVtpXSkqcmVtYWluZGVyCiAgICByZXMrPSgoKG1vZDEqaW52KG1vZDEsbW9kMikpJW1vZDIpKnIyKSVtb2QyOyAgICAgICAgLy9hcHBseWluZyBDUlQgZm9ybXVsYSAocHJvZC9hW2ldKSppbnYocHJvZC9hW2ldKSpyZW1haW5kZXIKICAgIAogICAgY291dDw8KHJlcyk8PGVuZGw7Cn0K