## https://yukicoder.me/problems/no/1529 MOD = 998244353 def main(): N = int(input()) # エラトステネスの篩 is_primes = [True] * N primes = [] is_primes[1] = False for p in range(2, N): if not is_primes[p]: continue primes.append(p) x = 2 * p while x < N: is_primes[x] = False x += p # 答えの計算 answer = 1 array_forward = [0] * N array_backward = [0] * N for p in primes: q = p max_y = 0 while q < N: x = q while x < N: array_forward[x] += 1 y = array_forward[x] + array_backward[x] max_y = max(max_y, y) array_backward[N - x] += 1 y = array_forward[N - x] + array_backward[N - x] max_y = max(max_y, y) x += q q *= p x = p while x < N: array_forward[x] = 0 array_backward[N - x] = 0 x += p answer *= pow(p, max_y, MOD) answer %= MOD print(answer) if __name__ == "__main__": main()