#include <bits/stdc++.h>
using namespace std;
#define ULL unsigned long long
int n,p[16]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};
ULL ans;
void dfs(int depth,ULL tmp,int num){//当前深度,当前值,当前值因子数
if(num>n||depth>=16)return ;//如果当前搜到的值的因子数大过所求或深度超过16就不用求了
if(num==n&&tmp<ans)ans=tmp;//如果当前因子数等于N且当前值比答案小就更新答案
for(int i=1;i<=64;i++){//当前深度的质数乘多少个
if(ans<tmp)break;//如果当前值比已更新答案要大就不用再往后乘了
dfs(depth+1,tmp*=p[depth],num*(i+1));//下一层递归,深度+1,当前值乘当前深度质数(注意同一层是累乘),当前值因子数翻(I+1)倍
}
}
int main() {
while(cin>>n){//求最小的有N个因子的数
ans=~0ULL;//这个是ULL最大值,不是1!!!
cout<<ans<<endl;
dfs(0,1,1);
cout<<ans<<endl;
}
return 0;
}