MOD = 998244353 class Solver: def __init__(self): self.memo_f = {} self.memo_s = {} self.memo_u = {} def f(self, n): if n in self.memo_f: return self.memo_f[n] if n == 0: return 0 if n == 1: return 1 if n % 2 == 0: res = self.f(n // 2) + 1 else: res = min(self.f((n - 1) // 2) + 2, self.f((n + 1) // 2) + 2) self.memo_f[n] = res % MOD return self.memo_f[n] def u(self, m): if m in self.memo_u: return self.memo_u[m] if m <= 1: return 0 res = self.u(m - 1) + min(self.f(m - 1), self.f(m)) self.memo_u[m] = res % MOD return self.memo_u[m] def s(self, n): if n in self.memo_s: return self.memo_s[n] if n == 0: return 0 if n == 1: return 1 a = n // 2 b = (n - 1) // 2 part1 = 1 + a + 2 * b part2 = self.s(a) part3 = self.u(b + 1) res = part1 + part2 + part3 self.memo_s[n] = res % MOD return self.memo_s[n] def main(): import sys data = sys.stdin.read().split() if not data: return N = int(data[0]) solver = Solver() result = solver.s(N) % MOD print(result) if __name__ == '__main__': main()