//package com.daimens.algorithm.june;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

/**
 * 
 * @author DemonSong
 * 
 *         5.GCD and LCM
 * 
 *         GCD and LCM Time Limit : 1 sec, Memory Limit : 65536 KB Japanese
 *         version is here GCD and LCM Write a program which computes the
 *         greatest common divisor (GCD) and the least common multiple (LCM) of
 *         given a and b.
 * 
 *         Input Input consists of several data sets. Each data set contains a
 *         and b separated by a single space in a line. The input terminates
 *         with EOF.
 * 
 *         Constraints 0 < a, b ??? 2,000,000,000 LCM(a, b) ??? 2,000,000,000 The
 *         number of data sets ??? 50 Output For each data set, print GCD and LCM
 *         separated by a single space in a line.
 * 
 *         Sample Input 8 6 50000000 30000000 Output for the Sample Input 2 24
 *         10000000 150000000
 * 
 *
 */
public class Main{

	public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        long a,b;
 
 
        while((str=br.readLine()) != null){
            a = Long.parseLong(str.substring(0, str.indexOf(" ")));
            b = Long.parseLong(str.substring(str.indexOf(" ")+1, str.length()));
 
            System.out.println(gcd(a, b) + " " + lcm(a,b));
 
        }
    }
	
	private static long gcd(long a, long b){
		if (b == 0) return a;
		return gcd(b, a % b);
	}
	
	private static long lcm(long a, long b) {
		return a * b / gcd(a, b);
	}

} import java.io.BufferedReader; BufferedReader java.io import java.io.IOException; IOException java.io import java.io.InputStream; InputStream java.io import java.io.InputStreamReader; InputStreamReader java.io import java.util.StringTokenizer; StringTokenizer java.util public class Main{

	public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        long a,b;
 
 
        while((str=br.readLine()) != null){
            a = Long.parseLong(str.substring(0, str.indexOf(" ")));
            b = Long.parseLong(str.substring(str.indexOf(" ")+1, str.length()));
 
            System.out.println(gcd(a, b) + " " + lcm(a,b));
 
        }
    }
	
	private static long gcd(long a, long b){
		if (b == 0) return a;
		return gcd(b, a % b);
	}
	
	private static long lcm(long a, long b) {
		return a * b / gcd(a, b);
	}

} Main public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        long a,b;
 
 
        while((str=br.readLine()) != null){
            a = Long.parseLong(str.substring(0, str.indexOf(" ")));
            b = Long.parseLong(str.substring(str.indexOf(" ")+1, str.length()));
 
            System.out.println(gcd(a, b) + " " + lcm(a,b));
 
        }
    } main {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        long a,b;
 
 
        while((str=br.readLine()) != null){
            a = Long.parseLong(str.substring(0, str.indexOf(" ")));
            b = Long.parseLong(str.substring(str.indexOf(" ")+1, str.length()));
 
            System.out.println(gcd(a, b) + " " + lcm(a,b));
 
        }
    } BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); br new BufferedReader(new InputStreamReader(System.in)) String str; str long a a b; b while((str=br.readLine()) != null){
            a = Long.parseLong(str.substring(0, str.indexOf(" ")));
            b = Long.parseLong(str.substring(str.indexOf(" ")+1, str.length()));
 
            System.out.println(gcd(a, b) + " " + lcm(a,b));
 
        } (str=br.readLine()) != null (str=br.readLine()) str br.readLine() br.readLine br null {
            a = Long.parseLong(str.substring(0, str.indexOf(" ")));
            b = Long.parseLong(str.substring(str.indexOf(" ")+1, str.length()));
 
            System.out.println(gcd(a, b) + " " + lcm(a,b));
 
        } a = Long.parseLong(str.substring(0, str.indexOf(" "))) a Long.parseLong(str.substring(0, str.indexOf(" "))) Long.parseLong Long str.substring(0, str.indexOf(" ")) str.substring str 0 str.indexOf(" ") str.indexOf str " " b = Long.parseLong(str.substring(str.indexOf(" ")+1, str.length())) b Long.parseLong(str.substring(str.indexOf(" ")+1, str.length())) Long.parseLong Long str.substring(str.indexOf(" ")+1, str.length()) str.substring str str.indexOf(" ")+1 str.indexOf(" ") str.indexOf str " " 1 str.length() str.length str System.out.println(gcd(a, b) + " " + lcm(a,b)) System.out.println System.out System System.out gcd(a, b) + " " + lcm(a,b) gcd(a, b) + " " + lcm(a,b) gcd(a, b) gcd a b " " lcm(a,b) lcm a b String[] args args private static long gcd(long a, long b){
		if (b == 0) return a;
		return gcd(b, a % b);
	} gcd {
		if (b == 0) return a;
		return gcd(b, a % b);
	} if (b == 0) return a; b == 0 b 0 return a; a return gcd(b, a % b); gcd(b, a % b) gcd b a % b a b long a a long b b private static long lcm(long a, long b) {
		return a * b / gcd(a, b);
	} lcm {
		return a * b / gcd(a, b);
	} return a * b / gcd(a, b); a * b / gcd(a, b) a * b a b gcd(a, b) gcd a b long a a long b b public class Main{

	public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        long a,b;
 
 
        while((str=br.readLine()) != null){
            a = Long.parseLong(str.substring(0, str.indexOf(" ")));
            b = Long.parseLong(str.substring(str.indexOf(" ")+1, str.length()));
 
            System.out.println(gcd(a, b) + " " + lcm(a,b));
 
        }
    }
	
	private static long gcd(long a, long b){
		if (b == 0) return a;
		return gcd(b, a % b);
	}
	
	private static long lcm(long a, long b) {
		return a * b / gcd(a, b);
	}

} public class Main{

	public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        long a,b;
 
 
        while((str=br.readLine()) != null){
            a = Long.parseLong(str.substring(0, str.indexOf(" ")));
            b = Long.parseLong(str.substring(str.indexOf(" ")+1, str.length()));
 
            System.out.println(gcd(a, b) + " " + lcm(a,b));
 
        }
    }
	
	private static long gcd(long a, long b){
		if (b == 0) return a;
		return gcd(b, a % b);
	}
	
	private static long lcm(long a, long b) {
		return a * b / gcd(a, b);
	}

} Main
//package com.daimens.algorithm.june;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

/**
 * 
 * @author DemonSong
 * 
 *         5.GCD and LCM
 * 
 *         GCD and LCM Time Limit : 1 sec, Memory Limit : 65536 KB Japanese
 *         version is here GCD and LCM Write a program which computes the
 *         greatest common divisor (GCD) and the least common multiple (LCM) of
 *         given a and b.
 * 
 *         Input Input consists of several data sets. Each data set contains a
 *         and b separated by a single space in a line. The input terminates
 *         with EOF.
 * 
 *         Constraints 0 < a, b ??? 2,000,000,000 LCM(a, b) ??? 2,000,000,000 The
 *         number of data sets ??? 50 Output For each data set, print GCD and LCM
 *         separated by a single space in a line.
 * 
 *         Sample Input 8 6 50000000 30000000 Output for the Sample Input 2 24
 *         10000000 150000000
 * 
 *
 */
public class Main{

	public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        long a,b;
 
 
        while((str=br.readLine()) != null){
            a = Long.parseLong(str.substring(0, str.indexOf(" ")));
            b = Long.parseLong(str.substring(str.indexOf(" ")+1, str.length()));
 
            System.out.println(gcd(a, b) + " " + lcm(a,b));
 
        }
    }
	
	private static long gcd(long a, long b){
		if (b == 0) return a;
		return gcd(b, a % b);
	}
	
	private static long lcm(long a, long b) {
		return a * b / gcd(a, b);
	}

}