http://acm.hdu.edu.cn/showproblem.php?pid=2765
//1331246 2009-05-02 18:53:43 Accepted 2765 15MS 320K 882 B C++ no way 
#include<iostream>
using namespace std;
const int MAX = 2140000000;
int f[1000001];

void dfs(int p)
{
    
int i,sum = 1,temp;
    
if(p%2 == 1)
    
{
        
for(i=1;i<p;i+=2)
        
{
            temp 
= (p-i)/2;
            
if(f[temp]==MAX)
                dfs(temp);
            sum 
+= f[temp];
        }

    }

    
else //even
    {
        
for(i=0;i<p;i+=2)
        
{
            temp 
= (p-i)/2;
            
if(f[temp]==MAX)
                dfs(temp);
            sum 
+= f[temp];
        }
            
    }

    f[p] 
= sum;
}


int main()
{
    
int t,n,i,temp;
    
for(i=0;i<=10000;i++)
        f[i] 
= MAX;
    f[
0= 0;
    f[
1= 1;
    f[
2= 2;
    f[
3= 2;
    
int cas = 1;
    cin
>>t;
    
while(t--)
    
{
        cin
>>n;
        
if(f[n] == MAX)
            dfs(n);
        cout
<<cas++<<" "<<f[n]<<endl;
    }

    
return 0;
}