#include<iostream>
#include<cstring>
using namespace std;
const int MAX = 55;
int dp1[MAX][MAX][MAX];
int dp2[MAX][MAX];
int dp3[MAX][MAX];
int fun1(int i,int j,int k)
{
if(i==0&&k==0)
return 1;
if(i==0||j==0||k==0)
return 0;
if(dp1[i][j][k]!=-1)
{
return dp1[i][j][k];
}
int res=fun1(i,j-1,k);
if(i>=j)
{
res+=fun1(i-j,j,k-1);
}
dp1[i][j][k] = res;
return res;
}
int fun2(int i,int j)
{
if(i==0)
return 1;
if(j==0)
return 0;
if(dp2[i][j]!=-1)
{
return dp2[i][j];
}
int res=fun2(i,j-1);
if(i>=j)
res+=fun2(i-j,j-1);
dp2[i][j]=res;
return res;
}
int fun3(int i,int j)
{
if(i==0)
return 1;
if(j==0)
return 0;
if(dp3[i][j]!=-1)
{
return dp3[i][j];
}
int res=fun3(i,j-1);
if(i>=j&&j%2)
res+=fun3(i-j,j);
dp3[i][j]=res;
return res;
}
int main()
{
int n,k;
memset(dp1, -1, sizeof(dp1));
memset(dp2, -1, sizeof(dp2));
memset(dp3, -1, sizeof(dp3));
while(cin>>n>>k)
{
cout<<fun1(n,n,k)<<endl;
cout<<fun2(n,n)<<endl;
cout<<fun3(n,n)<<endl;
}
return 0;
}