#include #define rep(i,n) for (int i = 0; i < (n); i ++) using namespace std; typedef long long ll; typedef pair PL; typedef pair P; const int INF = 1e9; const ll MOD = 1e12; const double eps = 1e-6; vector sieve(int n) { vector prime(n + 1,true); prime[0] = false; prime[1] = false; for (int i = 3; i * i <= n; i += 2) { if (prime[i]) { int j = 2; while (i * j <= n) { prime[i * j] = false; j ++; } } } vector ans = {2}; for (ll i = 3; i < n + 1; i += 2) { if (prime[i]) ans.push_back(i); } return ans; } int main() { ll N; cin >> N; ll X = 1; vector primes = sieve(100000); for (ll p:primes){ while (N%(p*p) == 0) { N /= p; N /= p; X *= p; } } cout << X << ' ' << N << endl; }