/*#include <stdio.h>
typedef struct
{
int sco1,sco2,sco3;
char str[11];
}student;
int main()
{
student stu[100];
int n,i,j,k,max=0,f,sc1,sc2,c=1;
scanf("%d ",&n);
for(i=0;i<n;i++)
{
scanf("%s %d %d %d",stu[i].str,&stu[i].sco1,&stu[i].sco2,&stu[i].sco3);
}
for(i=0;i<n;i++)
{
if(max<stu[i].sco1)
{
max=stu[i].sco1;
f=i;
sc1=stu[i].sco2;
sc2=stu[i].sco3;
}
}
printf("%s ",stu[f].str);
for(i=0;i<n;i++)
{
if(sc1<stu[i].sco2)
{
c++;
}
}
printf("%d ",c);
c=1;
for(i=0;i<n;i++)
{
if(sc2<stu[i].sco3)
{
c++;
}
}
printf("%d",c);
}*/
/*
void f(int n)
{
for(int i=n;i>=1;i--)
{
printf("%d ",i);
}
return ;
}
void f(int n)
{
if(n==0){ //종료조건
return;
}
printf("%d ",n);
f(n-1); //재귀호출
}
재귀함수 다시 돌아오는 함수
함수 안에서 자신을 다시 호출하는 함수
자신으로 다시 정의내리는 함수
f(n) : n부터 1까지 출력
n출력 -> n-1부터 1까지출력
n출력 -> f(n-1) (n!=0)
f(3) 3 f(2) 2 f(1) 1 f(0) 0
*/
//f(n) : 1부터 n까지 출력
// : 1부터 n-1까지출력 -> n출력
// : f(n-1) -> n출력
/*
#include <stdio.h>
void f(int n)
{
if(n!=0)
{
f(n-1);
printf("%d ",n);
}
}
int main()
{
int n;
scanf("%d",&n);
f(n);
return 0;
}
*/
//f(a,b) : a부터 b까지 출력
/*
#include<stdio.h>
void f(int a,int b)
{
if(b>=a)
{
f(a,b-1);
if(b%2==1)
{
printf("%d ",b);
}
}
}
int main()
{
int a,b;
scanf("%d %d",&a,&b);
f(a,b);
return 0;
}
*/
/*
#include<stdio.h>
void f(int n)
{
if(n%2==1&&n!=1)
{
n=n*3+1;
f(n);
printf("%d ",n);
}
else if(n!=1)
{
n/=2;
f(n);
printf("%d ",n );
}
}
int main()
{
int n;
scanf("%d",&n);
f(n);
printf("%d",n);
}
*/
/*
f(n) : return (1~ n까지의 합);
return (1~n-1까의합 +n);
return (f(n-1)+n); (n!=0)
int f(int n)
{
if(n==1) return 1;
else return f(n-1)+n;
}
*/
/*#include<stdio.h>
int f(int n)
{
if(n==1)
{
return 1;
}
else
{
return f(n-1)*n;
}
}
int main()
{
int n;
scanf("%d",&n);
printf("%d",f(n));
}
*/
/*
f(n) : return n번째 피보나치수;
f(1) f(2) f(3) f(4)... f(n)
1 1 2 3 f(n-1)+f(n-2)
memoization 메모이제이션
#include<stdio.h>
int memo[201]={};
int f(int n)
{
if(memo[n]!=0) return memo[n];
if(n<=2)
{
return memo[n]=1;
}
else
{
return memo[n]=(f(n-1)+f(n-2))%10009;
}
}
int main()
{
int n;
scanf("%d",&n);
printf("%d",f(n));
}
f(r,c) : r행 c열의 값
f(r-1,c)+f(r,c-1);
int memo[51][51]={};
memo[r][c] = f(r,c)값
*/
#include<stdio.h>
int memo[51][51]={};
int f(int r,int c)
{
if(mome)
{
}
return memo[r][c]=f(r-1,c)+f(r,c-1);
}
int main()
{
int r,c;
scanf("%d %d",&r,&c);
printf("%d",f(r,c));
}