#include <bits/stdc++.h>
using namespace std;
long long dp[55][55][2], ans, bit[55];
int t[55], n, i, j, o;
const int MOD = 1000000007;
void pl(long long &x, long long y) { x = (x + y) % MOD; }
int main() {
  cin >> n;
  if (n == 0) {
    cout << 1;
    return 0;
  }
  while (n != 0) {
    t[++o] = n % 2;
    n /= 2;
  }
  for (i = 1; i <= o / 2; i++) swap(t[i], t[o - i + 1]);
  dp[0][0][1] = 1;
  bit[0] = 1;
  for (i = 1; i <= o; i++) {
    bit[i] = bit[i - 1];
    pl(bit[i], bit[i - 1]);
  }
  for (i = 0; i < o; i++)
    for (j = 0; j <= i; j++) {
      pl(dp[i + 1][j + 1][0], dp[i][j][0]);
      if (t[i + 1] == 1) pl(dp[i + 1][j + 1][1], dp[i][j][1]);
      pl(dp[i + 1][j][0], dp[i][j][0] * bit[j]);
      if (j) {
        if (t[i + 1] == 0) {
          pl(dp[i + 1][j][1], dp[i][j][1] * bit[j - 1]);
        } else {
          pl(dp[i + 1][j][0], dp[i][j][1] * bit[j - 1]);
          pl(dp[i + 1][j][1], dp[i][j][1] * bit[j - 1]);
        }
      } else
        pl(dp[i + 1][j][0], dp[i][j][1] * bit[j]);
    }
  for (j = 0; j <= o; j++) pl(ans, dp[o][j][0]), pl(ans, dp[o][j][1]);
  cout << ans;
  return 0;
}
