#include <iostream>
#include <bitset>
#include <vector>
using namespace std;
int main()
{
vector<int> jg;
while(1)
{
bitset<21> foo;
long long a;
cin>>a;
if(a==0)
{
break;
}
foo=a;
int j=0;
for(int i=0;i<21;i++)
{
if((foo[i]==1)&&(foo[i+1]==0))
{
foo[i+1]=1;
foo[i]=0;
break;
}else if((foo[i]==1)&&(foo[i+1]==1))
{
foo[i]=0;
foo[j]=1;
j++;
}
}
a=0;
long long b=1;
for(int i=0;i<21;i++)
{
a=a+foo[i]*b;
b=b*2;
}
jg.push_back(a);
}
for(int i=0;i<jg.size();i++)
{
cout<<jg[i]<<endl;
}
return 0;
}
求在二进制中和给出数 1 同样多,且比给出数大的最小数。