#include using namespace std; #include using namespace atcoder; using ll = long long; ll x; vector divisor(long long n) { vector ret; for (long long i = 1; i * i <= n; i++) { if (n % i == 0) { ret.push_back(i); if (i * i != n) ret.push_back(n / i); } } sort(ret.begin(), ret.end()); // 昇順に並べる return ret; } using mit = modint998244353; unordered_map mp; unordered_map dp; unordered_map> divisor_mp; void solve(){ auto v = divisor(x); for(auto &i:v){ divisor_mp[i] = divisor(i); } dp[1] = 1; for(auto &i:v){ auto &v2 = divisor_mp[x/i]; for(auto &j:v2){ if(j==1)continue; dp[i*j] += dp[i]*(divisor_mp[j/gcd(i,j)].size()-1); } /* for(auto &j:v){ cout<> x; solve(); }