#include<stdio.h>
#define MOD 109546051211
#define MOD1 186583//factors of MOD
#define MOD2 587117//factors of MOD
/*"call" function calculates the multiplicative inverse using Fermat's Little Theorem*/
unsigned long long int call(unsigned long long int a,unsigned long long int b,int mod)
{
unsigned long long int res;
if(b==1)
return a;
res=call(a,b/2,mod);
res=(res*res)%mod;
if(b%2)
res=(res*a)%mod;
return res;
}
int main()
{
long long int i,fact,prod,n,p,q,i_eff,fact_eff,a=1,b=1;
fact=1;prod=1;i=1;
p=call(MOD1,MOD2-2,MOD2);//calculate inverse of MOD1 in MOD2
q=call(MOD2,MOD1-2,MOD1);//calculate inverse of MOD2 in MOD1
for(i=1;i<=n;i++)
{
a=i%MOD1;b=i%MOD2;
i_eff=(a*MOD2*q+b*MOD1*p)%MOD;//calculates i%MOD
fact*=i_eff;
a=fact%MOD1;b=fact%MOD2;
fact_eff=(a*MOD2*q+b*MOD1*p)%MOD;//calculates fact%MOD
prod*=(fact_eff);
a=prod%MOD1;b=prod%MOD2;
prod=(a*MOD2*q+b*MOD1*p)%MOD;//calculates prod%MOD
}
return 0;
}
I2luY2x1ZGU8c3RkaW8uaD4KI2RlZmluZSBNT0QgMTA5NTQ2MDUxMjExCiNkZWZpbmUgTU9EMSAxODY1ODMvL2ZhY3RvcnMgb2YgTU9ECiNkZWZpbmUgTU9EMiA1ODcxMTcvL2ZhY3RvcnMgb2YgTU9ECi8qImNhbGwiIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIG11bHRpcGxpY2F0aXZlIGludmVyc2UgdXNpbmcgRmVybWF0J3MgTGl0dGxlIFRoZW9yZW0qLwp1bnNpZ25lZCBsb25nIGxvbmcgaW50IGNhbGwodW5zaWduZWQgbG9uZyBsb25nIGludCBhLHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgYixpbnQgbW9kKQp7CiAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHJlczsKICAgIGlmKGI9PTEpCiAgICAgICAgcmV0dXJuIGE7CiAgICByZXM9Y2FsbChhLGIvMixtb2QpOwogICAgcmVzPShyZXMqcmVzKSVtb2Q7CiAgICBpZihiJTIpCiAgICByZXM9KHJlcyphKSVtb2Q7CiAgICByZXR1cm4gcmVzOwp9CmludCBtYWluKCkKewogICAgbG9uZyBsb25nIGludCBpLGZhY3QscHJvZCxuLHAscSxpX2VmZixmYWN0X2VmZixhPTEsYj0xOwogICAgc2NhbmYoIiVsbGQiLCZuKTsKICAgIGZhY3Q9MTtwcm9kPTE7aT0xOwogICAgcD1jYWxsKE1PRDEsTU9EMi0yLE1PRDIpOy8vY2FsY3VsYXRlIGludmVyc2Ugb2YgTU9EMSBpbiBNT0QyCiAgICBxPWNhbGwoTU9EMixNT0QxLTIsTU9EMSk7Ly9jYWxjdWxhdGUgaW52ZXJzZSBvZiBNT0QyIGluIE1PRDEKICAgIGZvcihpPTE7aTw9bjtpKyspCiAgICB7CiAgICAgICAgYT1pJU1PRDE7Yj1pJU1PRDI7CiAgICAgICAgaV9lZmY9KGEqTU9EMipxK2IqTU9EMSpwKSVNT0Q7Ly9jYWxjdWxhdGVzIGklTU9ECiAgICAgICAgZmFjdCo9aV9lZmY7CiAgICAgICAgYT1mYWN0JU1PRDE7Yj1mYWN0JU1PRDI7CiAgICAgICAgZmFjdF9lZmY9KGEqTU9EMipxK2IqTU9EMSpwKSVNT0Q7Ly9jYWxjdWxhdGVzIGZhY3QlTU9ECiAgICAgICAgcHJvZCo9KGZhY3RfZWZmKTsKICAgICAgICBhPXByb2QlTU9EMTtiPXByb2QlTU9EMjsKICAgICAgICBwcm9kPShhKk1PRDIqcStiKk1PRDEqcCklTU9EOy8vY2FsY3VsYXRlcyBwcm9kJU1PRAogICAgICAgIH0KICAgIHByaW50ZigiJWxsZFxuIixwcm9kKTsKICAgIHJldHVybiAwOwogICAgfQ==