func_code_string: #include <bits/stdc++.h>   using namespace std;   namespace fastIO1 {   inline char read() {     static const int IN_LEN = 1000000;     static char buf[IN_LEN], *s, *t;     return (s == t               ? t = (s = buf) + fread(buf, 1, IN_LEN, stdin),             (s == t ? -1 : *s++) : *s++);   }   template <class T>   inline void read(T &x) {     static bool iosig;     static char c;     for (iosig = false, c = read(); !isdigit(c); c = read()) {       if (c ==  - ) iosig = true;       if (c == -1) return;     }     for (x = 0; isdigit(c); c = read()) x = ((x + (x << 2)) << 1) + (c ^  0 );     if (iosig) x = -x;   }   inline char readc(char &c) {     for (c = read(); !isalpha(c) && !isdigit(c); c = read())       if (c == -1) return 0;   }   const int OUT_LEN = 10000000;   char obuf[OUT_LEN], *ooh = obuf;   inline void print(char c) {     if (ooh == obuf + OUT_LEN) fwrite(obuf, 1, OUT_LEN, stdout), ooh = obuf;     *ooh++ = c;   }   template <class T>   inline void print(T x) {     static int buf[30], cnt;     if (x == 0)       print( 0 );     else {       if (x < 0) print( - ), x = -x;       for (cnt = 0; x; x /= 10) buf[++cnt] = x % 10 + 48;       while (cnt) print((char)buf[cnt--]);     }   }   inline void flush() { fwrite(obuf, 1, ooh - obuf, stdout); }   }  // namespace fastIO1   namespace fastIO2 {   template <class T>   inline void read(T &x) {     static bool iosig;     static char c;     for (iosig = false, c = getchar(); !isdigit(c); c = getchar()) {       if (c ==  - ) iosig = true;       if (c == -1) return;     }     for (x = 0; isdigit(c); c = getchar()) x = ((x + (x << 2)) << 1) + (c ^  0 );     if (iosig) x = -x;   }   }  // namespace fastIO2   using namespace fastIO1;   long long n, ans, f[2][(135)][2];   long long calc(int x, int lena, int lenb, long long sum) {     memset(f, 0, sizeof(f)), f[1][0][0] = 1;     int now = 0, pre = 1;     for (int i = 0; (1ll << i) <= sum; i++, now ^= 1, pre ^= 1) {       for (int j = 0; j <= x; j++) f[now][j][0] = f[now][j][1] = 0;       for (int j = 0; j < 2; j++)         if (i < lena || !j)           for (int k = 0; k < 2; k++)             if (i < lenb || !k)               for (int l = 0; l < 2; l++) {                 int S = j + k + l;                 if (((sum >> i) & 1) ^ (S & 1)) continue;                 for (int m = 0; m + j + k <= x; m++)                   f[now][m + j + k][S >> 1] += f[pre][m][l];               }     }     return f[pre][x][0];   }   int main() {     read(n);     for (int i = 0; i <= 60; i++)       for (int j = 0; j <= 60; j++) {         long long mul = (1ll << i + 1) + (1ll << j + 1) - 3;         if (n < mul) break;         long long ret = n % mul - (1ll << j) + 1;         if (ret < 0) continue;         for (int k = (ret & 1); k <= i + j; k += 2)           ans += calc(k, i - 1, j - 1, (ret + k) >> 1);       }     cout << ans;   }   