#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>usingnamespace std;typedeflonglong LL;constint N =(1<<20)+10;int primes[N], cnt;int minp[N];//存的是最小质因子bool st[N];voidget_primes(int n){for(int i =2; i <= n; i ++)//枚举所有的数{if(!st[i])//如果i没有被筛过,说明i是质数{
minp[i]= i;
primes[cnt ++]= i;}for(int j =0; primes[j]* i <= n; j ++)//如果是合数,就把是i的质数倍的倍数的合数筛掉,这些质数是小于i的{int t = primes[j]* i;
st[t]=true;
minp[t]= primes[j];if(i % primes[j]==0)break;}}}intmain(){get_primes(N -1);int sum[N];//sum来存下某个质因子的个数int x;while(scanf("%d",&x)!=-1){int k =0, tot =0;//k表示有几个质因子,tot表示质因子的个数while(x >1){int p = minp[x];
sum[k]=0;while(x % p ==0){
x /= p;
sum[k]++;
tot ++;}
k ++;}
LL res =1;for(int i =1; i <= tot; i ++) res *= i;//求分子for(int i =0; i < k; i ++)//除去分母for(int j =1; j <= sum[i]; j ++)
res /= j;printf("%d %lld\n", tot, res);}return0;}