#include #define mp make_pair #define pb push_back using namespace std; using ll = long long int; template ostream& operator+(ostream& out, const vector &vec){ for(const auto &x : vec){ out< ostream& operator*(ostream& out, const vector &vec){ for(const auto &x : vec){ out+x; } return out; } template istream& operator>>(istream& in, vector &vec){ for(auto &x : vec){ in>>x; } return in; } void solve(){ ll n; cin>>n; vector pf; for(ll p=2;p<=2e6;p++){ ll e = 0; while(n % p == 0){ n /= p; ++e; } if(e > 0) pf.emplace_back(e); } if(n > 1){ ll sq = sqrtl(n); if(sq * sq == n) pf.emplace_back(2); ++sq; if(sq * sq == n) pf.emplace_back(2); sq -= 2; if(sq * sq == n) pf.emplace_back(2); } if(pf.size() == 0){ cout<<"1\n"; return; } sort(pf.begin(), pf.end(), greater()); int maxL = pf[0]; vector> dp(maxL + 1, vector(maxL + 1)); dp[0][0] = 1; for(int l=1;l<=maxL;l++){ for(int s=0;s<=maxL;s++){ for(int a=0;s-l*a>=0;a++){ dp[l][s] += dp[l-1][s - l * a]; } } } ll ans = 1; for(auto &e : pf){ ans *= dp[maxL][e]; } cout<