#include using namespace std; using ll = long long; unordered_map mp, mp_cn; unordered_map> ss_cnt; std::vector sosu; ll m = 998244353; ll cnt_yk(ll a){ if (mp_cn.find(a) != mp_cn.end()) { return mp_cn[a]; } if (a == 1) { return mp_cn[a] = 1; } mp_cn[a] = 0; for (ll i = 1; i * i <= a; i ++) { if (a % i == 0) { mp_cn[a] ++; if (i * i < a) { mp_cn[a] ++; } } } return mp_cn[a]; } ll calc(ll a) { if (mp.find(a) != mp.end()) { return mp[a]; } mp[a] = 0; for (ll i = 1; i * i <= a; i ++) { if (a % i == 0) { ll kj = calc(i); for (int j = 0; j < sosu.size(); j ++) { if (ss_cnt[i][j] == ss_cnt[a][j]) { kj *= (ss_cnt[a][j] + 1); kj %= m; } } mp[a] += kj; if (i * i < a && i > 1) { ll b = a / i; ll kj = calc(b); for (int j = 0; j < sosu.size(); j ++) { if (ss_cnt[b][j] == ss_cnt[a][j]) { kj *= (ss_cnt[a][j] + 1); kj %= m; } } mp[a] += kj; } mp[a] %= m; } } return mp[a]; } int main() { ll N; cin >> N; mp[1] = 1; ll n = N; for (ll i = 2; i * i <= N; i ++) { if (n < i) break; if (n % i == 0) { sosu.push_back(i); while (n % i == 0) { n /= i; } } } if (n > 1) { sosu.push_back(n); } for (ll i = 1; i * i <= N; i ++) { if (N % i == 0) { ss_cnt[i] = sosu; ll j = i; for (int p = 0; p < sosu.size(); p ++) { ss_cnt[i][p] = 0; ll q = sosu[p]; while (j % q == 0) { ss_cnt[i][p] ++; j /= q; } } if (i * i < N) { ll a = N / i; ss_cnt[a] = sosu; ll j = a; for (int p = 0; p < sosu.size(); p ++) { ss_cnt[a][p] = 0; ll q = sosu[p]; while (j % q == 0) { ss_cnt[a][p] ++; j /= q; } } } } } cout << calc(N) << endl; }