/*
分析:
长春区赛的水题(2012),枚举+二分。
网上有各种神牛的解释,菜鸟就不废话了,囧~~~
2012-10-23
*/
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"math.h"
__int64 n;
__int64 Z(__int64 x,__int64 k)
{
__int64 i;
__int64 t;
t=x;
for(i=2;i<=k;i++) x*=t;
return x;
}
int main()
{
__int64 i;
__int64 r_ans,k_ans,cop;
__int64 low,up,mid;
__int64 t,temp;
while(scanf("%I64d",&n)!=-1)
{
r_ans=1;
k_ans=cop=n-1;
for(i=2;i<=40;i++)
{
low=2;up=pow(n,1.0/i); //想不明白,我对这个右边界做了更好的优化,结果WA,去掉那个优化用这个,AC。。。
while(low<=up)
{
mid=(low+up)>>1;
temp=Z(mid,i);
temp--;
temp*=mid;
if(temp<n*(mid-1)) low=mid+1;
else up=mid-1;
}
temp=Z(low,i);
temp--;
temp*=low;
if(temp==n*(low-1))
{
t=i*low;
if(t<cop) {cop=t;r_ans=i;k_ans=low;}
else if(t==cop && r_ans>i) {r_ans=i;k_ans=low;}
}
}
n--;
for(i=2;i<=40;i++)
{
low=2;up=pow(n,1.0/i);
while(low<=up)
{
mid=(low+up)>>1;
temp=Z(mid,i);
temp--;
temp*=mid;
if(temp<n*(mid-1)) low=mid+1;
else up=mid-1;
}
temp=Z(low,i);
temp--;
temp*=low;
if(temp==n*(low-1))
{
t=i*low;
if(t<cop) {cop=t;r_ans=i;k_ans=low;}
else if(t==cop && r_ans>i) {r_ans=i;k_ans=low;}
}
}
printf("%I64d %I64d\n",r_ans,k_ans);
}
return 0;
}