#include <iostream>
using namespace std;
//英语 看博友分析 抄博友程序 dfs+dp未实现 动态规划 巧妙 背
long long dp[300][300];//抄博友分析 其中i表示数据的和,j表示i的所有解中所有数大于等于j的情况总数
int main()
{
for(int i=0;i<300;i++)
{
dp[0][i]=1;//定义为 背
}
for(int i=0;i<300;i++)
{
for(int j=0;j<=i;j++)//抄博友程序 j<300 wa 背
{
if(j*2>i)//只能拆分成 i 本身
{
dp[i][j]=1;
}
}
}
for(int i=1;i<300;i++)
{
for(int j=i/2;j>=1;j--)
{
dp[i][j]=dp[i-2*j][j]+dp[i][j+1];//背
}
}
int n;
while(1)
{
cin>>n;
if(n==0)
{
break;
}
cout<<n<<" "<<dp[n][1]<<endl;
}
return 0;
}