MOD = 998244353 def factorize(n): factors = {} i = 2 while i * i <= n: while n % i == 0: factors[i] = factors.get(i, 0) + 1 n = n // i i += 1 if n > 1: factors[n] = 1 return factors def generate_divisors(factors): divisors = [1] for p, exp in factors.items(): current_length = len(divisors) for e in range(1, exp + 1): p_power = p ** e for i in range(current_length): divisors.append(divisors[i] * p_power) divisors = list(sorted(divisors)) return divisors def main(): N = int(input()) if N == 1: print(0) return factors = factorize(N) primes = sorted(factors.keys()) divisors = generate_divisors(factors) n_div = len(divisors) # Precompute exponents for each divisor exponents = [] for d in divisors: ex = {} temp = d for p in primes: ex[p] = 0 while temp % p == 0: ex[p] += 1 temp //= p exponents.append(ex) div_to_idx = {d: i for i, d in enumerate(divisors)} dp = [0] * n_div dp[0] = 1 # Starting at divisor 1 for i in range(n_div): d = divisors[i] ex_d = exponents[i] for j in range(i + 1, n_div): m = divisors[j] if m % d != 0: continue # Compute exponents for m ex_m = exponents[j] count = 1 for p in primes: a_p = ex_d.get(p, 0) b_p = ex_m.get(p, 0) if a_p < b_p: # Must have exactly b_p in a_i continue else: # Can have 0 to b_p in a_i count = (count * (b_p + 1)) % MOD dp[j] = (dp[j] + dp[i] * count) % MOD # Find the index of N in divisors idx = div_to_idx[N] print(dp[idx] % MOD) if __name__ == '__main__': main()