#include #include using namespace std; using mint = atcoder::modint998244353; using ll = long long; int main(){ ll n; cin >> n; const int lg = __lg(n); mint ans; auto f = [&](int b){ vector dp(2, vector(60)); dp[1][0] = 1; for(int i = lg; i >= 0; i--){ vector ndp(2, vector(60)); for(int j = 0; j < 2; j++){ int r = j ? (n >> i) & 1 : 1; for(int k = 0; k < 59; k++){ for(int l = 0; l <= r; l++){ if(i == b && l == 0) continue; ndp[j & (l == r)][k + l] += dp[j][k]; } } } swap(dp, ndp); } mint coef; for(int i = 0; i < 60; i++){ mint tmp = dp[0][i] + dp[1][i]; coef += tmp * (tmp + 1) / 2; } ans += coef * mint(1ll << b); }; for(int i = 0; i <= lg; i++) f(i); cout << ans.val() << '\n'; }