#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int get(int a,int b)
{
//l最小取值是1
int l = 1,r = 1e9 + 1;//因为b-1可能==0,如果是1e9/1e9=1,不可能==0,所以加1,即1e9+1/1e9==0
while(l<r)
{
int mid = l + r >> 1;
if(a / mid <= b) r = mid;
else l = mid+1;
}
return r;//这里的l和r是在v的取值范围里,所以返回的r即为所求可能的v值
}
int main()
{
int n;
scanf("%d", &n);
int v_min = 1,v_max = 1e9;
while(n--)
{
int a,b;
scanf("%d%d",&a,&b);
v_min = max(v_min,get(a,b));//因为是向下取整,所以是max
v_max = min(v_max,get(a,b-1)-1);//比较v值,获得最值v
}
printf("%d %d\n",v_min,v_max);
return 0;
}