#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;
}
