#include using namespace std; #define rep(i, n) for (int i = 0; i < (int)(n); i++) const long long mod = 998244353; vector> c(64, vector (64)); long long com(int n, int r){ if(n-r < 0 || r < 0)return 0; return c[n-r][r]; } long long pop_count(long long x){ long long r = 0; while(x){ if(x&1)r++; x /= 2; } return r; } long long modpow(long long n, long long r){ long long ans = 1; while(r){ if(r%2)ans = ans * n % mod; n = n * n % mod; r /= 2; } return ans; } long long inverse(long long n){ return modpow(n, mod-2); } vector pc_count_s(long long I){ vector r(60); if(I == 0){ r[0] = 1; return r; } int k = 0; while(I>1ll< pc_count(long long n){ vector r(60), s(60); if(n == 0){ r[0] = 1; return r; } long long i = 1ll<<59; while(!(n&i))i/=2; if(i-1 != 1)r = pc_count_s(i-1); else r = pc_count(i-1); s = pc_count(n-i); rep(i, 59)r[i+1] = (r[i+1]+s[i])%mod; return r; } vector pc_count_i(long long n, long long i){ vector r(60), s(60), t(60); int a; if(n v(60); cin >> n; ans = n%mod*((n+1)%mod)%mod*inverse(2)%mod; for(long long i = 1; i <= n; i *= 2){ v = pc_count_i(n, i); for(long long x: v)ans = (ans + i%mod*com2(x)%mod)%mod; } cout << ans << endl; }