#include #include #include using namespace std; typedef vector vi; typedef int _loop_int; #define REP(i,n) for(_loop_int i=0;i<(_loop_int)(n);++i) struct myhash{ size_t operator()(const vi &v) const { hash hsh; size_t ret=0; for(int x:v){ ret ^= hsh(x); ret = ret ^ (ret<<13); ret = ret ^ (ret>>17); ret = ret ^ (ret<<5); } return ret; } }; int n,x; typedef unordered_set ss; ss po,nxt; int num; void step(int p){ num--; nxt.clear(); for(const vi &X : po){ if(num0 && X[i]==X[i-1])continue; vi add(n,0); int nw = X[i]*p; int it = 0; REP(j,n){ while(it==i)it++; if(itnum){ puts("0"); return 0; }else if(n==num){ puts("1"); return 0; } } // factorize x with n numbers po.insert(vi(n,1)); for(int p=2;p*p<=x;p++){ while(x%p==0){ x/=p; step(p); } } if(x!=1)step(x); int ans = po.size(); printf("%d\n",ans); return 0; }