#include using ll = long long; constexpr ll MOD = 1000000007; constexpr int SIZE = 60; int main() { ll N; std::cin >> N; if (N == 0) { return std::cout << 0 << std::endl, 0; } std::bitset b(N); std::vector dp(8, 0); dp[0] = 1; for (int i = SIZE - 1; i >= 0; i--) { const bool B = b[i]; dp = { B ? 0 : dp[0], B ? 0 : dp[1], (dp[2] + (B ? dp[0] : dp[2])) % MOD, (2 * dp[3] + (B ? dp[1] + dp[2] : 0)) % MOD, (dp[4] + (B ? dp[0] : 0)) % MOD, (dp[5] + (B ? dp[1] : 0)) % MOD, (dp[4] + 3 * dp[6] + (B ? 2 * dp[2] : 0)) % MOD, (dp[5] + dp[6] + 4 * dp[7] + (B ? 2 * dp[3] : 0)) % MOD}; } std::cout << (dp[3] + dp[7]) % MOD << std::endl; return 0; }