T3

注意到 x!x! 不能太大,所以 xx 的取值非常小。

那么可以枚举 xx,然后二分出在 x!×yyn>0x!\times y-y-n>0 的情况下 yy 的最小值,再减一就是 x!×yyn<0x!\times y-y-n<0 的情况下 yy 的最大值。

判断是否更优即可。

注意 x,y2x,y\neq 2

//Man always remember love because of romance only!
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){
    int X=0,w=0; char ch=0;
    while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
    while(isdigit(ch)) X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
    return w?-X:X;
}
inline void write(int x){
	if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar(x%10+'0');
}
signed main(){
	int n=read();
	int sum=1;
	int ans=2e9;
	int nx,ny;
	for(int x=1;sum<=2e9;x++){
		sum*=x;
		if(x==2) continue;
		int tp=sum-1;
		int l=3,r=1e9;
		int res=-1;
		while(l<=r){
			int mid=(l+r)/2;
			if(mid*tp-n>=0) res=mid,r=mid-1;
			else l=mid+1;
		}
		ans=min(ans,abs(tp-n));
		if(ans==abs(tp-n)){
			nx=x,ny=1;
		}
		if(res==-1) continue;
		ans=min(ans,abs(res*tp-n));
		if(ans==abs(res*tp-n)){
			nx=x,ny=res;
		}
		if(res!=3){
			ans=min(ans,abs((res-1)*tp-n));
			if(ans==abs((res-1)*tp-n)){
				nx=x,ny=res-1;
			}
		}
//		cout<<ans<<endl;
	}
	cout<<nx<<" "<<ny;
	return 0;
}