#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
void exgcd(LL a,LL b,LL &x,LL &y)//扩展欧几里得
{
if(!b) x=1,y=0;
else
{
exgcd(b,a%b,x,y);
LL t=x;
x=y;
y=t-a/b*y;
}
}
LL gcd(LL a,LL b)//辗转相除
{
return b ? gcd(b,a%b):a;
}
int main()
{
int n;
cin>>n;
LL a0,m0;
cin>>a0>>m0;
for(int i=1;i<n;i++)
{
LL a2,m2;
cin>>a2>>m2;
LL k1,k2;
LL d=gcd(a0,-a2),y=m2-m0;// gcd(a0,a2)=gcd(a0,-a2).
if(y%d){cout<<-1<<endl;return 0;}//无解。
exgcd(a0,-a2,k1,k2);//扩展欧几里得
k1=(LL)k1*y/d,k2=(k2/d)*y;//裴蜀定理
//如果下面两行不写的话,k1此时并不为最小非负。
//后面迭代的m0会出错。
LL t=abs(a2/d);
k1=(k1%t+t)%t;//以k1为底层来不断进行更新,找到k1的最小非负数解。
m0=m0+k1*a0,a0=abs(a0/d*a2);
}
cout<<(m0%a0+a0)%a0<<endl;//x的最小非负数解
return 0;
}