/*#include <stdio.h>
int main()
{
int n,m,c=0;
// scanf("%d",&n);
// scanf("%d",&m);
n=997;m=36;
for(int i=1;i<=n;i++)
{
if(m%i==0||i%m==0)
{
c++;
}
}
printf("%d",c);
}
*/
/*#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int sta[200]={};
int top=-1;
void push(int n)
{
sta[++top]=n;
}
int compare(void* a, void* b)
{
int* x = (int*)a;
int* y = (int*)b;
if(*x>*y) return 1;
else if(*x<*y) return -1;
else return 0;
}
int main()
{
int a,b,c=0,i;
scanf("%d %d",&a,&b);
push(b);
push(a);
push(1);
for(i=2;i<=sqrt(b);i++)
{
if(a%i==0&&b%i==0&&sqrt(a)>i)
{
push(i);
push(b/i);
push(a/i);
}
else if(a%i==0&&sqrt(a)>i)
{
push(i);
push(a/i);
}
else if(b%i==0)
{
push(i);
push(b/i);
}
}
qsort(sta,top+1,sizeof(int),compare);
for(int i=0;i<=top;i++)
{
if(sta[i-1]!=sta[i])
printf("%d ",sta[i]);
}
return 0;
}*/
/***********************************************
내장 quick sort 사용법!
1. stdlib 쓰기
2. qsort(배열이름, 배열길이, sizeof(배열의자료형), compare);
3. compare 함수 작성하기
int compare(void* a , void* b)
{
int* x = (int*)a; // 포인터형변환
if(*x > *y) return 1;
else if return -1;
else return 0;
}*******
두 수 a, b , a와b의최대공약수=x , a와b의최소공배수=y
a*b=x*y
두 수의 최대공약수를 구하는 아주 간단한 재귀함수 (외우면 좋은)
int gcd(int a, int b)
{
if(a==0) return b;
return gcd(b%a, a);
}********************************************
*//*
int gcd(int a, int b)
{
int c;
while(a!=0)
{
c=b%a;
b=a;
a=c;
}
return b;
}
*/
#include<stdio.h>
#include<math.h>
int gcd(int a, int b)
{
if(a==0) return b;
return gcd(b%a, a);
}
int main()
{
int arr[10]={};
int i,n,a;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
if(i!=0)
a=gcd(a,arr[i]);
else
a=arr[0];
}
printf("%d\n",a);
int c=arr[0];
for(i=1;i<n;i++)
{
c=c*arr[i]/gcd(c,arr[i]);
}
printf("%d",c);
}