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.util.*;
        public class Hello {
        	public static PriorityQueue<Long> primeFactors(long n)
            {
        		PriorityQueue<Long> res = new PriorityQueue<Long>();
                // Print the number of 2s that divide n 
                while (n % 2 == 0) { 
                    n /= 2;
                    res.add((long) 2);
                } 
                
          
                // n must be odd at this point.  So we can 
                // skip one element (Note i = i +2) 
                for (long i = 3; i <= Math.sqrt(n); i += 2) { 
                    // While i divides n, print i and divide n 
                    while (n % i == 0) { 
                        res.add((long)i);
                        n /= i; 
                    }
                } 
          
                // This condition is to handle the case whien 
                // n is a prime number greater than 2 
                if (n > 2) 
                    res.add(n);
                return res;
            }
        	  static Stack<Long> printDivisors(long n) 
        	    { 
        		  Stack<Long> res = new Stack<Long>();
        	        // Note that this loop runs till square root 
        	        for (long i=1; i<=Math.sqrt(n); i++) 
        	        { 
        	            if (n%i==0) 
        	            { 
        	                // If divisors are equal, print only one 
        	                if (n/i == i) 
        	                    res.add(i);
        	       
        	                else // Otherwise print both 
        	                    {
        	                	res.add(i);res.add(n/i);
        	                    }
        	            } 
        	        }
        	        return res;
        	    } 
        	  static long power(long x, long y, long p) 
        	    { 
        	        // Initialize result 
        	        long res = 1;      
        	         
        	        // Update x if it is more   
        	        // than or equal to p 
        	        x = x % p;  
        	      
        	        while (y > 0) 
        	        { 
        	            // If y is odd, multiply x 
        	            // with result 
        	            if((y & 1)==1) 
        	                res = (res * x) % p; 
        	      
        	            // y must be even now 
        	            // y = y / 2 
        	            y = y >> 1;  
        	            x = (x * x) % p;  
        	        } 
        	        return res; 
        	    } 
        	  static long gcd(long aa, long l) 
        	    { 
        	    if (aa == 0) 
        	        return l;  
        	    return gcd(l % aa, aa);  
        	    } 
        	      
        	    // method to return LCM of two numbers 
        	    static long lcm(long aa, long l) 
        	    { 
        	        return (aa*l)/gcd(aa, l); 
        	    } 
        	static long A = 1000000000+7;
        	public static void main(String[] args) {
        		Scanner sc = new Scanner(System.in);
        		long n = sc.nextLong();long r1 = 1;long r2 = n;long min= n+2;
        		for(long i=1;i*i<n+5;i++) {
        			if(n%i==0) {
        			long a = n/i;
        			if(lcm(i,a)==n) {
        				if(Math.max(a, i)<min) {
        					r1 = a;
        					r2 = i;
        					min = Math.max(a, i);
        				}
        			}
        			}else {
        				continue;
        			}
        	}
        		System.out.println(r1 +" " + r2);
//        		if(n==1) {
//        			System.out.println(1 + " " + 1);
//        			return;
//        		}
//        		
//        		PriorityQueue<Long> p = primeFactors(n);
//        		System.out.println(p);
//        		long[] pr = new long[(int) (2*Math.sqrt(p.size())+5)];
//        		long l = p.poll();int c = 1;
//        		long prod = l;
//        		int k =0;
//        		while(!p.isEmpty()) {
//        			long aaa = p.poll();
//        		if(aaa==l) {
//        			c++;
//        		}else {
//        			pr[k++]=(long) (Math.pow(l, c));
//        			c = 1;
//        			l = aaa;
//        		}
//        		}
//        		prod = n;
//        		pr[k++] = (long)Math.pow(l, c);
//        		TreeSet<Long>prr = new TreeSet<Long>();
//        		for(int i=0;i<pr.length;i++) {
//        			if(pr[i]==0)break;
//        			prr.add(pr[i]);
//        		}
//        		k = 0;
//        		while(!prr.isEmpty())
//        			pr[k++] = prr.pollFirst();
        		//System.out.println(lcm(aa,prod/aa));
        }
     }