#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
const int NMAX = 55, MAX_2 = 29, MAX_3 = 18, MAX_5 = 12;
int N, X[NMAX], Y[NMAX], Freq2[NMAX], Freq3[NMAX], Freq5[NMAX], Ans[NMAX * NMAX], Now[NMAX * NMAX];
bool Is[MAX_2 * 2 + 1][MAX_3 * 2 + 1][MAX_5 * 2 + 1], UPD[MAX_2 * 2 + 1][MAX_3 * 2 + 1][MAX_5 * 5 + 1];
void Mult(int A[NMAX * NMAX], int V)
{
int i, T = 0;
for(i = 1; i <= A[0] || T; i ++, T /= 10)
A[i] = (T += A[i] * V) % 10;
A[0] = i - 1;
}
int Comp(int A[NMAX * NMAX], int B[NMAX * NMAX])
{
if(A[0] != B[0])
{
if(A[0] < B[0]) return -1;
return 1;
}
for(int i = A[0]; i > 0; -- i)
if(A[i] != B[i])
{
if(A[i] < B[i]) return -1;
return 1;
}
return 0;
}
void Copy(int Source[NMAX * NMAX], int Destination[NMAX * NMAX])
{
for(int i = 0; i <= Source[0]; ++ i)
Destination[i] = Source[i];
}
bool Check(int X, int Y, int Z)
{
return (0 <= X && X <= 2 * MAX_2 && 0 <= Y && Y <= 2 * MAX_3 && 0 <= Z && Z <= 2 * MAX_5);
}
int main()
{
freopen("aliens.in", "r", stdin);
freopen("aliens.out", "w", stdout);
scanf("%i", &N);
for(int i = 1; i <= N; ++ i)
{
scanf("%i %i", &X[i], &Y[i]);
while(X[i] % 2 == 0) Freq2[i] ++, X[i] /= 2;
while(X[i] % 3 == 0) Freq3[i] ++, X[i] /= 3;
while(X[i] % 5 == 0) Freq5[i] ++, X[i] /= 5;
while(Y[i] % 2 == 0) Freq2[i] --, Y[i] /= 2;
while(Y[i] % 3 == 0) Freq3[i] --, Y[i] /= 3;
while(Y[i] % 5 == 0) Freq5[i] --, Y[i] /= 5;
// printf("%i %i %i\n", Freq2[i], Freq3[i], Freq5[i]);
}
Is[MAX_2][MAX_3][MAX_5] = 1;
for(int i = 1; i <= N; ++ i)
{
for(int j = 2 * MAX_2; j >= 0; --j)
for(int k = 2 * MAX_3; k >= 0; -- k)
for(int l = 2 * MAX_5; l >= 0; -- l)
if(Is[j][k][l] && Check(j + Freq2[i], k + Freq3[i], l + Freq5[i]) && !UPD[j][k][l])
UPD[j + Freq2[i]][k + Freq3[i]][l + Freq5[i]] = 1, /*printf("(%i, %i, %i) -> (%i, %i, %i)\n", j - MAX_2, k - MAX_3, l - MAX_5, j + Freq2[i] - MAX_2, k + Freq3[i] - MAX_3, l + Freq5[i] - MAX_5),*/Is[ j + Freq2[i] ][ k + Freq3[i] ][ l + Freq5[i] ] = 1;
for(int j = 0; j <= 2 * MAX_2; ++ j)
for(int k = 0; k <= 2 * MAX_3; ++ k)
for(int l = 0; l <= 2 * MAX_5; ++ l)
UPD[j][k][l] = 0;
}
for(int i = MAX_2; i <= 2 * MAX_2; ++ i)
for(int j = MAX_3; j <= 2 * MAX_3; ++ j)
for(int k = MAX_5; k <= 2 * MAX_5; ++ k)
{
if(!Is[i][j][k]) continue;
// printf("%i %i %i\n", i - MAX_2, j - MAX_3, k - MAX_5);
memset(Now, 0, sizeof(Now));
Now[0] = Now[1] = 1;
for(int l = 1; l <= i - MAX_2; ++ l) Mult(Now, 2);
for(int l = 1; l <= j - MAX_3; ++ l) Mult(Now, 3);
for(int l = 1; l <= k - MAX_5; ++ l) Mult(Now, 5);
/* for(int l = Now[0]; l >= 1; -- l)
printf("%i", Now[l]);
printf("\n");*/
if(Comp(Ans, Now) == -1)
Copy(Now, Ans);
}
for(int i = Ans[0]; i; -- i)
printf("%i", Ans[i]);
return 0;
}