#include using namespace std; ////////////////// #ifdef DEBUG #include "debug.h" #define DEB #define dump(...) \ DUMPOUT << " " << string(#__VA_ARGS__) << ": " \ << "[" << to_string(__LINE__) << ":" << __FUNCTION__ << "]" \ << endl \ << " ", \ dump_func(__VA_ARGS__) #else #define DEB if (false) #define dump(...) #endif // http://beet-aizu.hatenablog.com/entry/2018/04/08/145516 template vector make_v(size_t a){return vector(a);} template auto make_v(size_t a,Ts... ts){ return vector(ts...))>(a,make_v(ts...)); } template typename enable_if::value==0>::type fill_v(T &t,const V &v){t=v;} template typename enable_if::value!=0>::type fill_v(T &t,const V &v){ for(auto &e:t) fill_v(e,v); } ////////////////// #define int long long #define rep(i,n) for(int i=0, i##_len=(n); i bool chmax(T &a, const T &b) { if (a bool chmin(T &a, const T &b) { if (a>b) { a=b; return 1; } return 0; } //* #define mod 1000000007 /*/ #define mod 998244353 //*/ typedef pair P; #define INF (1LL<<60) vector > prime_factorize(int n) { vector > res; for (int p = 2; p * p <= n; ++p) { if (n % p != 0) continue; int num = 0; while (n % p == 0) { ++num; n /= p; } res.push_back(make_pair(p, num)); } if (n != 1) res.push_back(make_pair(n, 1)); return res; } int modpow(int a, int k, int p){ int ans = 1; while (k > 0){ if (k % 2 == 1){ ans *= a; ans %= p; } a = (a*a) % p; k = k / 2; } return ans; } void solve(){ int N; cin >> N; auto r = prime_factorize(N); int a=1, b = 1; for(P p : r){ if(p.second%2==1) b*=p.first; a *= modpow(p.first, p.second/2, INF); } cout << a << " " << b << endl; } signed main(){ cout << fixed << setprecision(18); cerr << fixed << setprecision(18); solve(); }