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
import java.util.*;
public class CF_1285_C {
    public static HashMap<Long,Long> construct(long lcm) {
        HashMap<Long,Long> hm=new HashMap<>();
        for(long i=2;i*i<=lcm;++i) {
            while(lcm%i==0) {
                hm.put(i,hm.getOrDefault(i*1l,1l)*i);
                lcm/=i;
            } 
        }
        if(lcm>1)
            hm.put(lcm,hm.getOrDefault(lcm,1l)*lcm);
        return hm;
    }
    private static class Pair {
        long i;
        long j;
        public Pair(long i, long j) {
            this.i=i;
            this.j=j;
        }
        @Override
        public String toString() {
            return i+" "+j;
        }
    }
    public static Pair minimize(Pair[] arr,long a,int i,long b) {
        if(i==arr.length) {
            Pair aa= new Pair(Math.min(a,b),Math.max(a,b));
            // System.out.println(aa);
            return aa;
        }
        Pair aa=minimize(arr, a*arr[i].j, i+1, b);
        Pair bb=minimize(arr, a,i+1, b*arr[i].j);
        // System.out.println(aa);
        // System.out.println(bb);
        if(aa.j<bb.j)
            return aa;
        else
            return bb;
    }
    public static void main(String args[]) {
        Scanner sc=new Scanner(System.in);
        long lcm=sc.nextLong();
        HashMap<Long,Long> hm=construct(lcm);
        Pair pairs[]=new Pair[hm.size()];
        int count=0;

        for(Map.Entry<Long,Long>entry:hm.entrySet()) {
            long key=entry.getKey();
            long val=entry.getValue();
            pairs[count++]=new Pair(key,val);
            // System.out.println(pairs[count-1]);
        }
        Pair pp=minimize(pairs, 1, 0, 1);
        System.out.println(pp.i+" "+pp.j);
    }
}