#include //全てのヘッダファイルをインクルード //ループ #define REP(i, n) for(int i = 0; i < n; i++) //普通のループ #define REPR(i, n) for(int i = n; i >= 0; i--) //逆ループ #define FOR(i, m, n) for(int i = m; i < n; i++) //最初の数値を指定したループ //型名省略 typedef long long ll; //配列要素数 static const int MAX = 200000; using namespace std; //#include "./lib/generic/sort.h" std::tuple swap(int num1, int num2){ return std::forward_as_tuple(num1, num2); } void traceArray(int A[], int N){ for(int i=0; i> N; int A[N]; REP(i, N) cin >> A[i];*/ //sort::Sort test; //test.sortByIntention(A, N); //test.sortByBubble(A, N); //test.sortBySelection(A, N); //traceArray(A, N); /*int N=200, pointer=0; int A[N]; char tmp; while(1){ cin >> tmp; //pointer == push(A, pointer, tmp); if(cin.eof()){ cout << "bbb" << endl; break; } }*/ ll n; cin >> n; ll a=2, v1=1; while(n>=a*a){ if(n%(a*a)==0){ n/=a*a; v1*=a; }else{ a++; } } cout << v1 << " " << n; return 0; }