Problem: Today, Osama gave Fadi an integer X, and Fadi was wondering about the minimum possible value of max(a, b) such that LCM(a, b) equals X. Both a and b should be positive integers.

LCM(a, b) is the smallest positive integer that is divisible by both a and b. For example, LCM(6, 8) = 24, LCM(4, 12) = 12, LCM(2, 3) = 6.

Of course, Fadi immediately knew the answer. Can you be just like Fadi and find any such pair?

Input

The first and only line contains an integer X (1 ≤ X ≤ 10^{12}).

Output

Print two positive integers, a and b, such that the value of max(a, b) is minimum possible and LCM(a, b) equals X. If there are several possible such pairs, you can print any.

Examples

Input


2


Output


1 2


Input


6


Output


2 3


Input


4


Output


1 4


Input


1


Output


1 1

Solution (in JAVA):

Solution:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;

public class fadiandlcm {

    public static void main(String[] args) {
        FastScanner fs = new FastScanner();
        int T = 1;
        //T=fs.nextInt();
        for (int tt = 0; tt < T; tt++) {
        		long n=fs.nextLong();
        		long a=1l;long b=n;
        		for(long i=2;i*i<n;i++){

        				if(n%i!=0){continue;}
        				long div1= i;
        				long div2= n/div1;
        				long cmax=Math.max(div1,div2);
        				long cmin = Math.min(div1,div2);
        				if(div2==div1){continue;}
        				//System.out.println(div2+" "+div1);
        				long pro = div2*div1;
        				long gcd = gcd(div2,div1);

        				long time = pro/gcd;
        				if(pro%gcd==0&& time==n){
        				if(cmax<b){
        					b=cmax;
        					a=cmin;
        				}
        			}
        		}
        		System.out.println(a+" "+b);
        }
    }


    static long gcd(long a, long b)
    {
    	//System.out.println(a+" "+b);
      if (b == 0)
        return a;
    if(a==0) return b;
      return gcd(b, a % b);
    }
    static void sort(int[] a) {
        ArrayList<Integer> l = new ArrayList<>();
        for (int i : a) l.add(i);
        Collections.sort(l);
        for (int i = 0; i < a.length; i++) a[i] = l.get(i);
    }

    static class FastScanner {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer("");

        String next() {
            while (!st.hasMoreTokens())
                try {
                    st = new StringTokenizer(br.readLine());
                } catch (IOException e) {
                    e.printStackTrace();
                }
            return st.nextToken();
        }

        int nextInt() {
            return Integer.parseInt(next());
        }

        int[] readArray(int n) {
            int[] a = new int[n];
            for (int i = 0; i < n; i++) a[i] = nextInt();
            return a;
        }

        long nextLong() {
            return Long.parseLong(next());
        }
    }


}