MOD = 998244353 N = int(input()) L = N.bit_length() dp = [[[[[0]*(L+1) for _ in range(2)] for _ in range(2)] for _ in range(L+1)] for _ in range(L+1)] dp2 = [[[[[0]*(L+1) for _ in range(2)] for _ in range(2)] for _ in range(L+1)] for _ in range(L+1)] dp[0][0][0][0][0] = 1 for i in range(L): c = L-1-i for j in range(L+1): for k in range(L+1): for smallA in range(2): for smallB in range(2): if dp[j][k][smallA][smallB][i] == 0: continue for l in range(2): if not 1<>c & 1 == 1 and l == 0][smallB or N>>c & 1 == 1 and m == 0][i+1] += dp[j][k][smallA][smallB][i] dp[j+l][k+m][smallA or N>>c & 1 == 1 and l == 0][smallB or N>>c & 1 == 1 and m == 0][i+1] %= MOD add = (1<>c & 1 == 1 and l == 0][smallB or N>>c & 1 == 1 and m == 0][i+1] += (dp2[j][k][smallA][smallB][i]+add*dp[j][k][smallA][smallB][i])%MOD dp2[j+l][k+m][smallA or N>>c & 1 == 1 and l == 0][smallB or N>>c & 1 == 1 and m == 0][i+1] %= MOD ans = 0 for i in range(L+1): for j in range(2): for k in range(2): ans += dp2[i][i][j][k][-1] ans %= MOD ans += (1+N)*N%MOD*pow(2, -1, MOD)%MOD ans %= MOD ans *= pow(2, -1, MOD) ans %= MOD print(ans)