#include #include #include #include using namespace std; __int64 n,s,t; map<__int64,int> mm; void dd(__int64 n){ if(n==0)return ; if(mm[n])return ; s++; mm[n]=1; // printf("n=%I64d ",n); n--; __int64 l=0,r=0,t=1; while(n>=t*2){ l+=t; r+=t; t=t*2; n=n-t; } if(n>t){ l+=t; r+=(n-t); } else{ l+=n; } // printf("l=%I64d r=%I64d\n",l,r); dd(l); dd(r); } int main(){ int i,j,k; while(~scanf("%I64d",&n)){ mm.clear(); s=0; dd(n); printf("%I64d\n",s); } return 0; }