Code(AC on #2):
#include<bits/stdc++.h>
using namespace std;
const int maxn=5000;
struct bigint{
int len,a[maxn];
bigint(int x=0){
memset(a,0,sizeof(a));
for(len=1;x;len++){
a[len]=x%10;
x/=10;
}
len--;
}
int &operator[](int i){
return a[i];
}
void jw(int l){
len=l;
for(int i=1;i<=len;i++){
a[i+1]+=a[i]/10;
a[i]%=10;
}
for(;!a[len];){
len--;
}
}
void print(){
for(int i=max(len,1);i>=1;i--){
cout<<a[i];
}
}
};
bigint operator*(bigint a,int b){
bigint c;
int len=a.len;
for(int i=1;i<=len;i++){
c[i]=a[i]*b;
}
c.jw(len+11);
return c;
}
bigint operator/(bigint a,int b){
bigint c;
c.len=a.len;
for(int i=1;i<=c.len;i++){
c[i]=a[a.len+1-i];
}
int x=0;
for(int i=1;i<=c.len;i++){
x=x*10+a[i];
c[i]=x/b;
x%=b;
}
int st=1;
bigint d;
while(c[st]==0&&st<a.len)st++;
d.len=a.len-st+1;
for(int i=st;i<=a.len;i++){
d[i-st+1]=c[i];
}
return d;
}
bigint maxx(bigint a,bigint b){
if(a.len>b.len)return a;
if(a.len<b.len)return b;
for(int i=b.len;i>=1;i--){
if(a[i]>b[i])return a;
if(a[i]<b[i])return b;
}
return a;
}
struct r{
int a,b;
}s[1010];
bool cmp(r m,r n){
return m.a*m.b<n.a*n.b;
}
int n;
bigint anss,tt;
int main(){
anss[1]=1;
anss.len=1;
tt[1]=0;
tt.len=1;
ios::sync_with_stdio(false);
cin>>n;
for(int i=0;i<=n;i++){
cin>>s[i].a>>s[i].b;
}
sort(s+1,s+n+1,cmp);
for(int i=0;i<n;i++){
anss=anss*s[i].a;
tt=maxx(tt,anss/s[i+1].b);
}
tt.print();
return 0;
}