def GCD(x, y):
  # 最大公約数
    if x < y:
        x, y = y, x
    while True:
        r = x % y
        if r == 0:
            return y
        x, y = y, r


def calc_DCD_LCM(x, y):
  # 最大公約数
    gcd = GCD(x, y)
  # 最小公倍数
    lcm = int(x*y/gcd)
    return(gcd, lcm)


while True:
    try:
        x, y = list(map(int, input().split()))
        gcd, lcm = calc_DCD_LCM(x, y)
        print('{0} {1}'.format(gcd, lcm))
    except:
        exit(0) def GCD(x, y):
  # 最大公約数
    if x < y:
        x, y = y, x
    while True:
        r = x % y
        if r == 0:
            return y
        x, y = y, r GCD if x < y:
        x, y = y, x
     x < y x y x, y = y, x x y y x while True:
        r = x % y
        if r == 0:
            return y
        x, y = y, r True r = x % y r x % y x y if r == 0:
            return y
         r == 0 r 0 return y y x, y = y, r x y y r x x y y def calc_DCD_LCM(x, y):
  # 最大公約数
    gcd = GCD(x, y)
  # 最小公倍数
    lcm = int(x*y/gcd)
    return(gcd, lcm) calc_DCD_LCM gcd = GCD(x, y) gcd GCD(x, y) GCD x y lcm = int(x*y/gcd) lcm int(x*y/gcd) int x*y/gcd x*y x y gcd return(gcd, lcm) (gcd, lcm) gcd lcm x x y y while True:
    try:
        x, y = list(map(int, input().split()))
        gcd, lcm = calc_DCD_LCM(x, y)
        print('{0} {1}'.format(gcd, lcm))
    except:
        exit(0) True try:
        x, y = list(map(int, input().split()))
        gcd, lcm = calc_DCD_LCM(x, y)
        print('{0} {1}'.format(gcd, lcm))
    except:
        exit(0) except:
        exit(0) exit(0) exit 0 x, y = list(map(int, input().split())) x list(map(int, input().split())) list map(int, input().split()) map int input().split() ().split () input split y gcd, lcm = calc_DCD_LCM(x, y) gcd calc_DCD_LCM(x, y) calc_DCD_LCM x y lcm print('{0} {1}'.format(gcd, lcm)) print '{0} {1}'.format(gcd, lcm) '{0} {1}'.format '{0} {1}' format gcd lcm def calc_DCD_LCM(x, y):
  # 最大公約数
    gcd = GCD(x, y)
  # 最小公倍数
    lcm = int(x*y/gcd)
    return(gcd, lcm) def calc_DCD_LCM(x, y):
  # 最大公約数
    gcd = GCD(x, y)
  # 最小公倍数
    lcm = int(x*y/gcd)
    return(gcd, lcm) calc_DCD_LCM y = list(map(int, input().split())) list(map(int, input().split())) y gcd, lcm = calc_DCD_LCM(x, y) calc_DCD_LCM(x, y) gcd lcm = calc_DCD_LCM(x, y) calc_DCD_LCM(x, y) lcm x, y = list(map(int, input().split())) list(map(int, input().split())) x def GCD(x, y):
  # 最大公約数
    if x < y:
        x, y = y, x
    while True:
        r = x % y
        if r == 0:
            return y
        x, y = y, r def GCD(x, y):
  # 最大公約数
    if x < y:
        x, y = y, x
    while True:
        r = x % y
        if r == 0:
            return y
        x, y = y, r GCD
def GCD(x, y):
  # 最大公約数
    if x < y:
        x, y = y, x
    while True:
        r = x % y
        if r == 0:
            return y
        x, y = y, r


def calc_DCD_LCM(x, y):
  # 最大公約数
    gcd = GCD(x, y)
  # 最小公倍数
    lcm = int(x*y/gcd)
    return(gcd, lcm)


while True:
    try:
        x, y = list(map(int, input().split()))
        gcd, lcm = calc_DCD_LCM(x, y)
        print('{0} {1}'.format(gcd, lcm))
    except:
        exit(0)
