#include <stdio.h>
int cr[31]={};
int cn[31]={};
int Nc(int n,int n2,int c,int m) // n이 더 클때 팩토리얼, cn[] 배열에 추가
{
if(n==c)
{
cn[m]=n;
return 0;
}
cn[m]=n;
n--;
return Nc(n,n2,c,m);
}
int Rc(int r,int r2,int c,int m) //r이 더 클때 팩토리얼, cr[] 배열에 추가
{
if(r==c)
{
cr[m]=r;
return r2;
}
cr[m]=r;
m++;
r--;
return Rc(r,r2,c,m);
}
int Rf(int r,int r2,int m) //cr[] 배열에 추가
{
if(r==0)
return r2;
cr[m]=r;
m++;
r--;
return Rf(r,r2,m);
}
int Nf(int n,int n2,int m) //cn[] 배열에 추가
{
if(n==0)
return n2;
cn[m]=n;
n++;
n--;
return Nf(n,n2,m);
}
void dev(int m) //cr 배열 약분, cr 배열 약분 후 cn 배열 1로 비꾸기
{
if(cn[m]==0)
{
m=0;
m1++;
}
if(cr[m1]==0)
return;
if(cr[m1]%cn[m]==0)
{
cr[m1]=cr[m1]/cn[m];
cn[m]=1;
}
m++;
return dev(m);
}
int main()
{
int n,n2=1,c,r,r2=1,m=1,m1=1;
scanf("%d %d",&n,&r);
if(n>r)
{
c=n-r;
c++;
n=Nc(n,n2,c,m);
m=1;
c=Rf(r,r2,m);
m=1;
dev(m);
}
else
{
c=r-n;
c++;
n=Rc(r,r2,c,m);
m=1;
c=Nf(n,n2,m);
m=1;
dev(m);
}
return 0;
}



