#define _CRT_SECURE_NO_WARNINGS
#include "bits/stdc++.h"
using namespace std;
#define int long long
#define CHOOSE(a) CHOOSE2 a
#define CHOOSE2(a0,a1,a2,a3,x,...) x
#define REP1(i, s, cond, cal) for (signed i = signed(s); i cond; i cal)
#define REP2(i, s, n) REP1(i, s, < signed(n), ++)
#define REP3(i, n) REP2(i, 0, n)
#define rep(...) CHOOSE((__VA_ARGS__,REP1,REP2,REP3))(__VA_ARGS__)
#define rrep(i, s) rep(i, s, >= 0, --)
#define all(c) begin(c), end(c)
#define X first
#define Y second
template<typename T>bool maxup(T& a, T&& b) { if (a < b) { a = b; return true; }; }
template<typename T>bool maxup(T& a, T& b) { if (a < b) { a = b; return true; }; }
template<typename T>bool minup(T& a, T&& b) { if (a > b) { a = b; return true; }; }
template<typename T>bool minup(T& a, T& b) { if (a > b) { a = b; return true; }; }
using VV = vector<vector<int>>;
using V = vector<int>;
using P = pair<int, int>;
using IP = pair<int, P>;
template<typename T>
inline void input(vector<T>& v) { for (auto& x : v) cin >> x; }
int Cb[65][65];
signed main() {
const int mod = 1e9 + 7;
Cb[0][0] = 1;
rep(i, 64) rep(j, 64) {
(Cb[i + 1][j] += Cb[i][j]) %= mod;
(Cb[i + 1][j + 1] += Cb[i][j]) %= mod;
}
int N; cin >> N;
int sum = ((N % 2 + 1 + N + 1) / 2) % mod * (N / 2 + 1) % mod;
int bs = 0;
int ovs = 0;
for (int i = 63; i >= 0; i--) if((N >> i) & 1){
(ovs += (1 << max(bs - 1, 0ll))) %= mod;
rep(j, 1, i + 1) {
(ovs += (Cb[i][j] * ((1 << (bs + j - 1)) % mod)) % mod) %= mod;
}
bs++;
}
// a xor b == N
(ovs += (1 << max(bs - 1, 0ll))) %= mod;
cout << (sum - ovs + N + 1) % mod << endl;
system("pause");
}
./Main.cpp: In function ‘int main()’:
./Main.cpp:56:17: warning: ignoring return value of ‘int system(const char*)’, declared with attribute warn_unused_result [-Wunused-result]
system("pause");
^