else printf("%I64d\n",ans);
}
int main()
{
freopen("combi.in","r",stdin);
freopen("combi.out","w",stdout);
while(scanf("%I64d%I64d",&n,&m)!=EOF){
init1();
lld a = gao(two,1024,2);
init2();
lld b = gao(five,mod5,5);
lld ans = CRT(a,b);
print(ans);
}
return 0;
}
/*
1515151 1213
...0836060000
151144 2002
...3558733440
10000000000 11411
...0000000000
115123131 1210
...2126393000
54546161515130 121231321
...6496000000
*/
#include
#include
#include
typedef long long lld;
const lld mod5 = 9765625;
lld n , m ;
lld fac[10000000];
lld two[64];
lld five[64];
lld Pow(lld a,lld b,lld mod)
{
lld ans = 1;
while(b) {
if(b&1) ans = ans * a % mod;
a = a*a % mod; b >>= 1;
}
return ans;
}
lld exgcd(lld a,lld b,lld &x,lld &y)
{
if(b==0) {x=1;y=0;return a;}
else {
lld d=exgcd(b,a%b,x,y);
lld t=x;
x=y;
y=t-a/b*y;
return d;
}
}
lld inverse(lld num,lld mod)
{
lld x,y;
exgcd(num,mod,x,y);
while(x<0) x+=mod,y-=num;
return x;
}
void init1()
{
two[0] = 1;
for(lld i = 1; i < 64; i++) two[i] = two[i-1]*2;
fac[1] = 1;fac[0] = 1;
for(lld i = 2; i <= 1024; i++) {
lld num = i;
fac[i] = fac[i-1];
if(i&1)fac[i] = fac[i]*num % 1024;
}
}
lld calc(lld n,lld mod)//n!去掉2或5的倍数后对mod取余
{
lld t = n / mod;
lld ans = 1 ;
if(t>=1)ans = Pow(fac[mod],t,mod);
int lim = n%mod;
return ans*fac[lim]%mod;
}
lld gao(lld b[],lld mod,lld num) //计算c(n,m) % mod
{
long long fenzi_ = 0 , fenmu_ = 0;
for(lld i=1;b[i]<=tn;fenzi_+=(tn/b[i]),i++);
for(lld i=1;b[i]<=tm;fenmu_+=(tm/b[i]),i++);
for(lld i=1;b[i]<=tnm;fenmu_+=(tnm/b[i]),i++);
lld cnt = fenzi_ - fenmu_;
lld fenzi = calc(tn,mod);
for(lld i = 1;b[i]<=tn;i++) fenzi = fenzi*calc(tn/b[i],mod)%mod;
lld fenmu = calc(tnm,mod);
for(lld i=1;b[i]<=tnm;i++) fenmu=fenmu*calc(tnm/b[i],mod)%mod;
fenmu = fenmu * calc(tm,mod) % mod;
for(lld i=1;b[i]<=tm;i++) fenmu=fenmu*calc(tm/b[i],mod)%mod;
return fenzi*inverse(fenmu,mod)%mod*Pow(num,cnt,mod)%mod;
}
void init2()
{
five[0] =1;
for(lld i = 1; i <= 50; i++) five[i] = five[i-1] * 5;
fac[1] = 1; fac[0] = 1;
for(lld i = 2; i <= mod5; i++) {
lld num = i;
fac[i] = fac[i-1];
if(i%5!=0) fac[i] = fac[i]*num % mod5;
}
}
//x % 1024 = a;
//x % mod5 = b;
//上面两个式子用中国剩余定理合并
lld CRT(lld a,lld b)
{
lld mod = 10000000000LL;
lld x,y;
exgcd(mod5,1024,x,y);
x=x*a%mod;
lld p = x, q;
exgcd(1024,mod5,x,y);
x=x*b%mod;
q = x;
lld ans = (mod5*p%mod+1024LL*q%mod)%mod;
return (ans+mod)%mod;
}
void print(lld ans)
{
if(n-m
lld a=1;
bool flag = false;
for(lld i = 1; i <= m; i++)
{
t=t*(n-i+1)/i;
a=a*(n-i+1)/i;
if(a>=10000000000LL || t>=1e10)
{
flag = true;
break;
}
}
if(flag) printf("...%010I64d\n",ans);
else printf("%I64d\n",ans);
}
int main()
{
freopen("combi.in","r",stdin);
freopen("combi.out","w",stdout);
while(scanf("%I64d%I64d",&n,&m)!=EOF){
init1();
lld a = gao(two,1024,2);
init2();
lld b = gao(five,mod5,5);
lld ans = CRT(a,b);
print(ans);
}
return 0;
}
/*
1515151 1213
...0836060000
151144 2002
...3558733440
10000000000 11411
...0000000000
115123131 1210
...2126393000
54546161515130 121231321
...6496000000
*/