/*
#include <stdio.h>
void star(int m)
{
if(m==0) return 0;
printf("*");
star(m-1);
}
void f(int j)
{
if(j==0) return ;
f(j-1);
//printf("%d\n",j);
star(j); printf("\n");
}
int main()
{
int n,k;
scanf("%d",&n);
f(n);
}
f(n) : 1부터 n까지 출력 (x)
f(n) : 1부터 n 까지의합 리턴
f(n-1) + n 리턴
int f(int n)
{
if(n==1) return 1;
int sum=f(n-1);
return sum+n;
}
#include <stdio.h>
int sum(int n)
{
if(n==1) return 1;
return sum(n-1)+n;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d",sum(n));
}
#include <stdio.h>
int sum(int m)
{
if(m==1) return 1;
return sum(m-1)*m;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d",sum(n));
}
fib(n) : n번째 피보나치수
: n-1번째 피보나치수 + n-2번째피보나치수
: fib(n-1) + fib(n-2)
f(1)
#include <stdio.h>
int two (int n)
{
if(n<1) return n;
two(n/2);
printf("%d",n%2);
}
int main()
{
int n;
scanf("%d",&n);
if(two(n)<1)
{
printf("%d",two(n));
}
}
#include <stdio.h>
void packsaeroee(int n);
{
if(n==1) return ;
if(n/2==1) n=3*n+1;
else if(n/2==0) n=n/2;
}
int main()
{
int n;
scanf("%d",&n);
packsaeroee(n);
}
fib(n) : n번째 피보나치수
: n-1번째 피보나치수 + n-2번째피보나치수
: fib(n-1) + fib(n-2)
#include <stdio.h>
int arr[201]={};
int fib(int n)
{
if(arr[n]!=0) return arr[n];
if(n<=2) return arr[n]=1;
return arr[n]=(fib(n-1)+fib(n-2))%10009;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d",fib(n));
}
*/
#include <stdio.h>
int arr[51][51]={};
int f(int n,int m)
{
if(arr[n][m]!=0) return arr[n][m];
if(n==1||m==1) return arr[n][m]=1;
return arr[n][m]=(f(n-1,m-1)+f(n+1,m))%100000000;
}
int main()
{
int n,m;
scanf("%d %d",&n,&m);
printf("%d",f(n,m));
}