#mathモジュールをインポートする
import math
try:
    while True:
        a,b = map(int,input().split())
        #最小公約数
        num1 = math.gcd(a,b)
        #最大公倍数
        num2 = int(a * b / num1)
        print(str(num1) + " " + str(num2))
#EOFErrorをひろいコードを終了する
except EOFError:
    pass import math math try:
    while True:
        a,b = map(int,input().split())
        #最小公約数
        num1 = math.gcd(a,b)
        #最大公倍数
        num2 = int(a * b / num1)
        print(str(num1) + " " + str(num2))
#EOFErrorをひろいコードを終了する
except EOFError:
    pass except EOFError:
    pass while True:
        a,b = map(int,input().split())
        #最小公約数
        num1 = math.gcd(a,b)
        #最大公倍数
        num2 = int(a * b / num1)
        print(str(num1) + " " + str(num2))
#EOFErrorをひろいコードを終了する True a,b = map(int,input().split()) a map(int,input().split()) map int input().split() ().split () input split b num1 = math.gcd(a,b) num1 math.gcd(a,b) math.gcd math gcd a b num2 = int(a * b / num1) num2 int(a * b / num1) int a * b / num1 a * b a b num1 print(str(num1) + " " + str(num2)) print str(num1) + " " + str(num2) str(num1) + " " str(num1) str num1 " " str(num2) str num2 a,b = map(int,input().split()) map(int,input().split()) a num2 = int(a * b / num1) int(a * b / num1) num2 b = map(int,input().split()) map(int,input().split()) b num1 = math.gcd(a,b) math.gcd(a,b) num1
#mathモジュールをインポートする
import math
try:
    while True:
        a,b = map(int,input().split())
        #最小公約数
        num1 = math.gcd(a,b)
        #最大公倍数
        num2 = int(a * b / num1)
        print(str(num1) + " " + str(num2))
#EOFErrorをひろいコードを終了する
except EOFError:
    pass
