import sys input = lambda :sys.stdin.readline()[:-1] ni = lambda :int(input()) na = lambda :list(map(int,input().split())) yes = lambda :print("yes");Yes = lambda :print("Yes");YES = lambda : print("YES") no = lambda :print("no");No = lambda :print("No");NO = lambda : print("NO") ####################################################################### """ \sum_k 2^k * p(k, a, b) p(k, j, n) = 2^k を含むようなp(a) = p(b) = j の数 a, b <= n """ mod = 998244353 from functools import lru_cache @lru_cache(maxsize=None) def f(k, j, n): if n < 0: return 0 if j < 0: return 0 if k == 0: return g(j-1, (n-1)//2) return (f(k-1, j-1, (n-1)//2) + f(k-1, j, n//2)) % mod @lru_cache(maxsize=None) def g(j, n): if n < 0: return 0 if j < 0: return 0 if j == 0: return 1 if n == 0: if j > 0: return 0 return 0 return (g(j-1, (n-1)//2) + g(j, n//2)) % mod N = ni() n = 64 ans = 0 for k in range(n): for j in range(n + 1): # print(k, j, N, f(k, j, N)) ans += f(k, j, N) * f(k, j, N) % mod * pow(2, k, mod) % mod ans %= mod ans += (N + 1) * N // 2 ans %= mod print(ans * pow(2, mod-2, mod) % mod)