#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include //#include #define rep(i,n) for(int i=0;i<(n);i++) #define all(x) x.begin(), x.end() #define rall(x) x.rbegin(), x.rend() #define sz(x) ((int)(x).size()) #define pb push_back using ll = long long; using namespace std; templatebool chmax(T &a, const T &b) { if (abool chmin(T &a, const T &b) { if (b& dp,const vector>& R, const vector>& CO){ if(dp[now]!=-1) return dp[now]; ll res = 0; rep(i,sz(R[now])){ res += dfs(R[now][i],dp,R,CO) * CO[now][i] % mod; } res %= mod; dp[now] = res; return res; } int main(){ ll X; cin >> X; vector A; for(ll i=1;i*i<=X;i++){ if(X%i==0){ A.pb(i); if(i*i!=X) A.pb(X/i); } } sort(all(A)); map P; ll tmp = X; for(ll i=2;i*i<=tmp; i++){ while(tmp%i==0){ P[i]++; tmp/=i; } if(tmp==1) break; } if(tmp!=1) P[tmp]++; int N = sz(A); vector> V(N); rep(i,N){ ll now = A[i]; for(auto p:P){ ll c = 0; while(now%p.first==0){ c++; now/=p.first; } V[i].pb(c); } } vector> R(N); vector> CO(N); ll cnt = 0; rep(i,N){ rep(j,i){ ll now = 1; rep(k,sz(P)){ if(V[i][k]>V[j][k]){ now *= 1; } else if(V[i][k]==V[j][k]){ now *= (V[j][k]+1); now %= mod; } else{ now = 0; break; } } if(now){ R[i].pb(j); CO[i].pb(now); cnt++; } } } vector dp(N,-1); dp[0]=1; cout << dfs(N-1,dp,R,CO) << endl; return 0; }