import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input;
		long a, b;
		while ((input = br.readLine()) != null) {
			String[] arr  = input.split(" ");
			a = Integer.parseInt(arr[0]);
			b = Integer.parseInt(arr[1]);
			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.InputStreamReader; InputStreamReader java.io public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input;
		long a, b;
		while ((input = br.readLine()) != null) {
			String[] arr  = input.split(" ");
			a = Integer.parseInt(arr[0]);
			b = Integer.parseInt(arr[1]);
			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 input;
		long a, b;
		while ((input = br.readLine()) != null) {
			String[] arr  = input.split(" ");
			a = Integer.parseInt(arr[0]);
			b = Integer.parseInt(arr[1]);
			System.out.println(gcd(a, b) + " " + lcm(a, b));
		}
	} main {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input;
		long a, b;
		while ((input = br.readLine()) != null) {
			String[] arr  = input.split(" ");
			a = Integer.parseInt(arr[0]);
			b = Integer.parseInt(arr[1]);
			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 input; input long a a b; b while ((input = br.readLine()) != null) {
			String[] arr  = input.split(" ");
			a = Integer.parseInt(arr[0]);
			b = Integer.parseInt(arr[1]);
			System.out.println(gcd(a, b) + " " + lcm(a, b));
		} (input = br.readLine()) != null (input = br.readLine()) input br.readLine() br.readLine br null {
			String[] arr  = input.split(" ");
			a = Integer.parseInt(arr[0]);
			b = Integer.parseInt(arr[1]);
			System.out.println(gcd(a, b) + " " + lcm(a, b));
		} String[] arr  = input.split(" "); arr input.split(" ") input.split input " " a = Integer.parseInt(arr[0]) a Integer.parseInt(arr[0]) Integer.parseInt Integer arr[0] arr 0 b = Integer.parseInt(arr[1]) b Integer.parseInt(arr[1]) Integer.parseInt Integer arr[1] arr 1 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;
		} 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 input;
		long a, b;
		while ((input = br.readLine()) != null) {
			String[] arr  = input.split(" ");
			a = Integer.parseInt(arr[0]);
			b = Integer.parseInt(arr[1]);
			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 input;
		long a, b;
		while ((input = br.readLine()) != null) {
			String[] arr  = input.split(" ");
			a = Integer.parseInt(arr[0]);
			b = Integer.parseInt(arr[1]);
			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
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String input;
		long a, b;
		while ((input = br.readLine()) != null) {
			String[] arr  = input.split(" ");
			a = Integer.parseInt(arr[0]);
			b = Integer.parseInt(arr[1]);
			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);
	}
}