#include <stdio.h>
#include <math.h>
#include <set>
#include <vector>
using namespace std;
const int N_MAX = 56;
set <pair <int, pair <int, int> > > v[2];
int sus[N_MAX], jos[N_MAX];
void fac(int X, int &nr2, int &nr3, int &nr5)
{
nr2 = 0, nr3 = 0, nr5 = 0;
while (X % 2 == 0) {
nr2 ++;
X /= 2;
}
while (X % 3 == 0) {
nr3 ++;
X /= 3;
}
while (X % 5 == 0) {
nr5 ++;
X /= 5;
}
}
char rez[512];
void mul(char A[], char B)
{
int i;
char t = 0;
for (i = 1; i <= A[0] || t; i++, t /= 10) {
A[i] = (t += A[i] * B) % 10;
}
A[0] = i - 1;
}
int main()
{
freopen("aliens.in", "r", stdin);
#ifndef _SCREEN_
freopen("aliens.out", "w", stdout);
#endif
int N, i;
scanf("%d\n", &N);
for (i = 1; i <= N; i ++) {
scanf("%d %d\n", &sus[i], &jos[i]);
}
v[0].insert(make_pair(0, make_pair(0, 0)));
int nr2s, nr3s, nr5s, nr2j, nr3j, nr5j;
int z, x, y;
int poz = 1;
set <pair <int, pair <int, int> > >::iterator it, sf;
for (i = 1; i <= N; i ++) {
fac(sus[i], nr2s, nr3s, nr5s);
fac(jos[i], nr2j, nr3j, nr5j);
nr2s -= nr2j, nr3s -= nr3j, nr5s -= nr5j;
for (it = v[poz ^ 1].begin(); it != v[poz ^ 1].end(); ++ it) {
x = (*it).first;
y = (*it).second.first;
z = (*it).second.second;
v[poz].insert(make_pair(x + nr2s, make_pair(y + nr3s, z + nr5s)));
v[poz].insert(make_pair(x, make_pair(y, z)));
}
poz ^= 1;
v[poz].clear();
}
poz ^= 1;
double sum = 0;
int mx = 0, my = 0, mz = 0;
for (it = v[poz].begin(); it != v[poz].end(); ++ it) {
x = (*it).first;
y = (*it).second.first;
z = (*it).second.second;
if (log(2) * x + log(3) * y + log(5) * z > sum && x >= 0 && y >= 0 && z >= 0) {
sum = log(2) * x + log(3) * y + log(5) * z;
mx = x, my = y, mz = z;
}
}
rez[0] = 1, rez[1] = 1;
for (i = 1; i <= mx; i ++) mul(rez, 2);
for (i = 1; i <= my; i ++) mul(rez, 3);
for (i = 1; i <= mz; i ++) mul(rez, 5);
for (i = rez[0]; i >= 1; i --) printf("%d", rez[i]);
printf("\n");
return 0;
}