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.io.BufferedReader;
		import java.io.FileReader;
		import java.io.IOException;
		import java.io.InputStreamReader;
		import java.io.PrintWriter;
		import java.math.BigInteger;
		import java.util.*;
		 
		public class oK{
				    void pre() throws Exception{}
				    void solve(int TC) throws Exception{
				    	Scanner sc=new Scanner(System.in);
				    	long x=nl();
						    for(long i=(int)Math.sqrt(x)+1;i>=1;i--) {
						    		long y=x/i;
						    		if(x%i!=0)continue;
						    		if(gcd(i,y)==1) {pn(y + " " + i);
						    		break;
						    		}
						    	}
						    }
						    static long gcd(long a, long b) 
						    { 
						      if (b == 0) 
						        return a; 
						      return gcd(b, a % b);  
						    } 
					    	
				    static boolean multipleTC = false, memory = false;
				    FastReader in;PrintWriter out;
				    void run() throws Exception{
				        in = new FastReader();
				        out = new PrintWriter(System.out);
				        int T = (multipleTC)?ni():1;
				        pre();for(int t = 1; t<= T; t++)solve(t);
				        out.flush();
				        out.close();
				    }
				    public static void main(String[] args) throws Exception{
				        if(memory)new Thread(null, new Runnable() {public void run(){try{new oK().run();}catch(Exception e){e.printStackTrace();}}}, "1", 1 << 28).start();
				        else new oK().run();
				    }
				    void p(Object o){out.print(o);}
				    void pn(Object o){out.println(o);}
				    void nd(Object o){out.println(o);}
				    void pni(Object o){out.println(o);out.flush();}
				    String n()throws Exception{return in.next();}
				    String nln()throws Exception{return in.nextLine();}
				    int ni()throws Exception{return Integer.parseInt(in.next());}
				    long nl()throws Exception{return Long.parseLong(in.next());}
				    double nd()throws Exception{return Double.parseDouble(in.next());}
				    
				    class FastReader{
				        BufferedReader br;
				        StringTokenizer st;
				        public FastReader(){
				            br = new BufferedReader(new InputStreamReader(System.in));
				        }
				
				        public FastReader(String s) throws Exception{
				            br = new BufferedReader(new FileReader(s));
				        }
				
				        String next() throws Exception{
				            while (st == null || !st.hasMoreElements()){
				                try{
				                    st = new StringTokenizer(br.readLine());
				                }catch (IOException  e){
				                    throw new Exception(e.toString());
				                }
				            }
				            return st.nextToken();
				        }
				
				        String nextLine() throws Exception{
				            String str = "";
				            try{   
				                str = br.readLine();
				            }catch (IOException e){
				                throw new Exception(e.toString());
				            }  
				            return str;
				        }
				    }
				}