#include long long int dp[100][2][2][200], cnt[100][2][2][200]; int main() { long long int n; scanf("%lld", &n); const long long int p = 998244353; long long int i, j, k, l; for (i = 0; i < 100; i++) for (j = 0; j < 2; j++) for (k = 0; k < 2; k++) for (l = 0; l < 200; l++) dp[i][j][k][l] = 0; cnt[62][0][0][100] = 1; for (l = 61; l >= 0; l--) { if (((n >> l) & 1) > 0) { //dp[l+1][0][0][100] //1,1 cnt[l][0][0][100] = 1; dp[l][0][0][100] += (dp[l + 1][0][0][100] + ((long long int)(1) << l)) % p; dp[l][0][0][100] %= p; //1,0 cnt[l][0][1][101]++; cnt[l][0][1][101] %= p; dp[l][0][1][101] += dp[l + 1][0][0][100]; dp[l][0][1][101] %= p; //0,0 cnt[l][1][0][100]++; cnt[l][1][0][100] %= p; dp[l][1][0][100] += dp[l + 1][0][0][100]; dp[l][1][0][100] %= p; //dp[l+1][0][1][i] for (i = 1; i < 199; i++) { //1,1 cnt[l][0][1][i] += cnt[l + 1][0][1][i]; cnt[l][0][1][i] %= p; dp[l][0][1][i] += (dp[l + 1][0][1][i] + ((long long int)(1) << l) % p * cnt[l + 1][0][1][i]) % p; dp[l][0][1][i] %= p; //1,0 cnt[l][0][1][i + 1] += cnt[l + 1][0][1][i]; cnt[l][0][1][i + 1] %= p; dp[l][0][1][i + 1] += dp[l + 1][0][1][i]; dp[l][0][1][i + 1] %= p; //0,1 cnt[l][1][1][i-1] += cnt[l + 1][0][1][i]; cnt[l][1][1][i-1] %= p; dp[l][1][1][i - 1] += dp[l + 1][0][1][i]; dp[l][1][1][i-1] %= p; //0,0 cnt[l][1][1][i] += cnt[l + 1][0][1][i]; cnt[l][1][1][i] %= p; dp[l][1][1][i] += dp[l + 1][0][1][i]; dp[l][1][1][i] %= p; } //dp[l+1][1][0][i] for (i = 1; i < 199; i++) { //1,1 cnt[l][1][0][i] += cnt[l + 1][1][0][i]; cnt[l][1][0][i] %= p; dp[l][1][0][i] += (dp[l + 1][1][0][i] + ((long long int)(1) << l) % p * cnt[l + 1][1][0][i]) % p; dp[l][1][0][i] %= p; //1,0 cnt[l][1][1][i + 1] += cnt[l + 1][1][0][i]; cnt[l][1][1][i + 1] %= p; dp[l][1][1][i + 1] += dp[l + 1][1][0][i]; dp[l][1][1][i + 1] %= p; //0,0 cnt[l][1][0][i] += cnt[l + 1][1][0][i]; cnt[l][1][0][i] %= p; dp[l][1][0][i] += dp[l + 1][1][0][i]; dp[l][1][0][i] %= p; } //dp[l+1][1][1][i] for (i = 1; i < 199; i++) { //1,1 cnt[l][1][1][i] += cnt[l + 1][1][1][i]; cnt[l][1][1][i] %= p; dp[l][1][1][i] += (dp[l + 1][1][1][i] + ((long long int)(1) << l) % p * cnt[l + 1][1][1][i]) % p; dp[l][1][1][i] %= p; //1,0 cnt[l][1][1][i+1] += cnt[l + 1][1][1][i]; cnt[l][1][1][i+1] %= p; dp[l][1][1][i + 1] += dp[l + 1][1][1][i]; dp[l][1][1][i+1] %= p; //0,1 cnt[l][1][1][i - 1] += cnt[l + 1][1][1][i]; cnt[l][1][1][i - 1] %= p; dp[l][1][1][i - 1] += dp[l + 1][1][1][i]; dp[l][1][1][i - 1] %= p; //0,0 cnt[l][1][1][i] += cnt[l + 1][1][1][i]; cnt[l][1][1][i] %= p; dp[l][1][1][i] += dp[l + 1][1][1][i]; dp[l][1][1][i] %= p; } } else { //dp[l+1][0][0][100] //0,0 cnt[l][0][0][100]++; cnt[l][0][0][100] %= p; dp[l][0][0][100] += dp[l + 1][0][0][100]; dp[l][0][0][100] %= p; //dp[l+1][0][1][i] for (i = 1; i < 199; i++) { //0,1 cnt[l][0][1][i - 1] += cnt[l + 1][0][1][i]; cnt[l][0][1][i - 1] %= p; dp[l][0][1][i - 1] += dp[l + 1][0][1][i]; dp[l][0][1][i - 1] %= p; //0,0 cnt[l][0][1][i] += cnt[l + 1][0][1][i]; cnt[l][0][1][i] %= p; dp[l][0][1][i] += dp[l + 1][0][1][i]; dp[l][0][1][i] %= p; } //dp[l+1][1][0][i] for (i = 1; i < 199; i++) { //1,1 cnt[l][1][0][i] += cnt[l + 1][1][0][i]; cnt[l][1][0][i] %= p; dp[l][1][0][i] += (dp[l + 1][1][0][i] + ((long long int)(1) << l) % p * cnt[l + 1][1][0][i]) % p; dp[l][1][0][i] %= p; //1,0 cnt[l][1][1][i + 1] += cnt[l + 1][1][0][i]; cnt[l][1][1][i + 1] %= p; dp[l][1][1][i + 1] += dp[l + 1][1][0][i]; dp[l][1][1][i + 1] %= p; //0,0 cnt[l][1][0][i] += cnt[l + 1][1][0][i]; cnt[l][1][0][i] %= p; dp[l][1][0][i] += dp[l + 1][1][0][i]; dp[l][1][0][i] %= p; } //dp[l+1][1][1][i] for (i = 1; i < 199; i++) { //1,1 cnt[l][1][1][i] += cnt[l + 1][1][1][i]; cnt[l][1][1][i] %= p; dp[l][1][1][i] += (dp[l + 1][1][1][i] + ((long long int)(1) << l) % p * cnt[l + 1][1][1][i]) % p; dp[l][1][1][i] %= p; //1,0 cnt[l][1][1][i + 1] += cnt[l + 1][1][1][i]; cnt[l][1][1][i + 1] %= p; dp[l][1][1][i + 1] += dp[l + 1][1][1][i]; dp[l][1][1][i + 1] %= p; //0,1 cnt[l][1][1][i - 1] += cnt[l + 1][1][1][i]; cnt[l][1][1][i - 1] %= p; dp[l][1][1][i - 1] += dp[l + 1][1][1][i]; dp[l][1][1][i - 1] %= p; //0,0 cnt[l][1][1][i] += cnt[l + 1][1][1][i]; cnt[l][1][1][i] %= p; dp[l][1][1][i] += dp[l + 1][1][1][i]; dp[l][1][1][i] %= p; } } } long long int ans = 0; l = 0; k = 100; for (i = 0; i < 2; i++) for (j = 0; j < 2; j++) ans = (ans + dp[l][i][j][k]) % p; printf("%lld\n", ans); return 0; }