#include using namespace std; using ll = long long; const int mod = 998244353; vector> Prime_factorization(ll val) { vector> ans; for (ll i = 2; i * i <= val; i++) { if (val % i == 0) { ans.emplace_back(i, 0); while (val % i == 0) { ans.back().second++; val /= i; } } } if (val != 1) ans.emplace_back(val, 1); return ans; } vector Divisors(ll N) { vector p, q; for (ll i = 1; i * i <= N; i++) { if (N % i == 0) { p.push_back(i); if (i != N / i) q.push_back(N / i); } } for (auto it = q.rbegin(); it != q.rend(); ++it) p.push_back(*it); return p; } void solve() { ll N; cin >> N; auto D = Divisors(N); auto E = Prime_factorization(N); vector> p(D.size(), vector(E.size())); for (size_t i = 0; i < D.size(); i++) for (size_t j = 0; j < E.size(); j++) { ll tmp = D[i], count = 0; while (tmp % E[j].first == 0) { tmp /= E[j].first; count++; } p[i][j] = count; } vector dp(D.size(), 0); dp[0] = 1; for (size_t i = 0; i < D.size(); i++) for (size_t j = i + 1; j < D.size(); j++) { if (D[j] % D[i] == 0) { ll tmp = 1; for (size_t k = 0; k < E.size(); k++) { if (p[i][k] == p[j][k]) { tmp = (tmp * (1 + p[i][k])) % mod; } } dp[j] = (dp[j] + dp[i] * tmp) % mod; } } cout << dp.back() << "\n"; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); solve(); }