#include #include #include using namespace std; typedef long long ll; const int N = 100000+5; ll n; int solve() { int height = 0; ll m = n; n--; ll cur = 2; while(n > 0) { n -= cur; height++; cur *= 2; } if(n == 0) { return height+1; } cur /= 2; n += cur; ll id = m-n+1; int ans = 1; for(int i = 1;i <= height; i++) { bool f1 = true; ll tmp = id; for(int j = 0;j < i; j++) { if(tmp > 1) tmp = tmp/2; else { f1 = false; break; } } for(int j = 0;j < i; j++) { if(tmp*2+1 > m) { f1 = false; break; } else { tmp = tmp*2+1; } } tmp = id-1; bool f3 = true; for(int j = 0;j < i; j++) { if(tmp > 1) tmp = tmp/2; else { f3 = false; break; } } for(int j = 0;j < i; j++) { tmp = tmp*2; } if(f3 && tmp*2 > m) f1 = true; tmp = m; for(int j = 0;j < i; j++) tmp /= 2; bool f2 = true; for(int j = 0;j < i; j++) { tmp = tmp*2+1; } if(tmp > m) f2 = true; else f2 = false; if(f2) { if(f1) ans += 2; else ans += 1; } else { ans ++; } } return ans; } int main() { while(scanf("%I64d", &n) == 1) { printf("%d\n", solve()); } return 0; }