import copy
dane = []
liczba_wierszy = int(input())
for x in range(liczba_wierszy):
    wiersz = input()
    lista_liczb_jako_str = wiersz.split(' ')
    lista_liczb_jako_int = list(map(int, lista_liczb_jako_str))
    dane.append(lista_liczb_jako_int)

print (dane)
dane_zrodlowe=tuple(dane)
dane_zrodlowe=copy.deepcopy(dane)
print ('ola')

lista = ['foobar']
enumerate(lista) == [(0, 'foobar')]
poz, x = (0, 'foobar')

#obliczanie GCD
#poz=0
def gcd(a,b):
    while a!=b:
        while a<b:
            b=b-a
            while a>b:
                a=a-b
        while a>b:
            a=a-b
            while a<b:
                b=b-a
    return a

def lcm(a,b,c):
    return (a*b)//c
    
# 1 sposób (gromadzimy dane w postaci 1 listy)              
#for poz,x in enumerate(dane):
#   GCD=gcd(x[0],x[1])
 #   dane_zrodlowe[poz].append(GCD)
  #  LCM=lcm(x[0], x[1], x[2])
   # dane_zrodlowe[poz].append(LCM)
    
#2 sposób (wyniki w nowej liście)  
wyniki=[]
for x in dane:
    GCD=gcd(x[0],x[1])
    LCM=lcm(x[0], x[1], GCD)
    wyniki.append((GCD,LCM))

print(wyniki)

lista=[]
for y in wyniki:
    k='(%s %s)' %(y[0], y[1])
    lista.append(k)

print(' '.join(lista))





9b5a176b44ae62fad26dcd83672ca1119501ab9a
<mask token>


def lcm(a, b, c):
    return a * b // c


<mask token>

<mask token>
for x in range(liczba_wierszy):
    wiersz = input()
    lista_liczb_jako_str = wiersz.split(' ')
    lista_liczb_jako_int = list(map(int, lista_liczb_jako_str))
    dane.append(lista_liczb_jako_int)
print(dane)
<mask token>
print('ola')
<mask token>
enumerate(lista) == [(0, 'foobar')]
<mask token>


def gcd(a, b):
    while a != b:
        while a < b:
            b = b - a
            while a > b:
                a = a - b
        while a > b:
            a = a - b
            while a < b:
                b = b - a
    return a


def lcm(a, b, c):
    return a * b // c


<mask token>
for x in dane:
    GCD = gcd(x[0], x[1])
    LCM = lcm(x[0], x[1], GCD)
    wyniki.append((GCD, LCM))
print(wyniki)
<mask token>
for y in wyniki:
    k = '(%s %s)' % (y[0], y[1])
    lista.append(k)
print(' '.join(lista))

<mask token>
dane = []
liczba_wierszy = int(input())
for x in range(liczba_wierszy):
    wiersz = input()
    lista_liczb_jako_str = wiersz.split(' ')
    lista_liczb_jako_int = list(map(int, lista_liczb_jako_str))
    dane.append(lista_liczb_jako_int)
print(dane)
dane_zrodlowe = tuple(dane)
dane_zrodlowe = copy.deepcopy(dane)
print('ola')
lista = ['foobar']
enumerate(lista) == [(0, 'foobar')]
poz, x = 0, 'foobar'


def gcd(a, b):
    while a != b:
        while a < b:
            b = b - a
            while a > b:
                a = a - b
        while a > b:
            a = a - b
            while a < b:
                b = b - a
    return a


def lcm(a, b, c):
    return a * b // c


wyniki = []
for x in dane:
    GCD = gcd(x[0], x[1])
    LCM = lcm(x[0], x[1], GCD)
    wyniki.append((GCD, LCM))
print(wyniki)
lista = []
for y in wyniki:
    k = '(%s %s)' % (y[0], y[1])
    lista.append(k)
print(' '.join(lista))

import copy
dane = []
liczba_wierszy = int(input())
for x in range(liczba_wierszy):
    wiersz = input()
    lista_liczb_jako_str = wiersz.split(' ')
    lista_liczb_jako_int = list(map(int, lista_liczb_jako_str))
    dane.append(lista_liczb_jako_int)
print(dane)
dane_zrodlowe = tuple(dane)
dane_zrodlowe = copy.deepcopy(dane)
print('ola')
lista = ['foobar']
enumerate(lista) == [(0, 'foobar')]
poz, x = 0, 'foobar'


def gcd(a, b):
    while a != b:
        while a < b:
            b = b - a
            while a > b:
                a = a - b
        while a > b:
            a = a - b
            while a < b:
                b = b - a
    return a


def lcm(a, b, c):
    return a * b // c


wyniki = []
for x in dane:
    GCD = gcd(x[0], x[1])
    LCM = lcm(x[0], x[1], GCD)
    wyniki.append((GCD, LCM))
print(wyniki)
lista = []
for y in wyniki:
    k = '(%s %s)' % (y[0], y[1])
    lista.append(k)
print(' '.join(lista))

import copy
dane = []
liczba_wierszy = int(input())
for x in range(liczba_wierszy):
    wiersz = input()
    lista_liczb_jako_str = wiersz.split(' ')
    lista_liczb_jako_int = list(map(int, lista_liczb_jako_str))
    dane.append(lista_liczb_jako_int)

print (dane)
dane_zrodlowe=tuple(dane)
dane_zrodlowe=copy.deepcopy(dane)
print ('ola')

lista = ['foobar']
enumerate(lista) == [(0, 'foobar')]
poz, x = (0, 'foobar')

#obliczanie GCD
#poz=0
def gcd(a,b):
    while a!=b:
        while a<b:
            b=b-a
            while a>b:
                a=a-b
        while a>b:
            a=a-b
            while a<b:
                b=b-a
    return a

def lcm(a,b,c):
    return (a*b)//c
    
# 1 sposób (gromadzimy dane w postaci 1 listy)              
#for poz,x in enumerate(dane):
#   GCD=gcd(x[0],x[1])
 #   dane_zrodlowe[poz].append(GCD)
  #  LCM=lcm(x[0], x[1], x[2])
   # dane_zrodlowe[poz].append(LCM)
    
#2 sposób (wyniki w nowej liście)  
wyniki=[]
for x in dane:
    GCD=gcd(x[0],x[1])
    LCM=lcm(x[0], x[1], GCD)
    wyniki.append((GCD,LCM))

print(wyniki)

lista=[]
for y in wyniki:
    k='(%s %s)' %(y[0], y[1])
    lista.append(k)

print(' '.join(lista))




