模板题
#include<bits/stdc++.h>
#define Code using
#define by namespace
#define wjb std
Code by wjb;
#define int long long
int in()
{
int k=0,f=1;
char c=getchar();
while(c<'0'||c>'9')
{
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9')k=k*10+c-'0',c=getchar();
return k*f;
}
void out(int x)
{
if(x<0)putchar('-'),x=-x;
if(x<10)putchar(x+'0');
else out(x/10),putchar(x%10+'0');
}
const int N=1e5+10;
int a[N],m[N];
void exgcd(int a,int b,int &x,int &y)
{
if(b==0)x=1,y=0;
else exgcd(b,a%b,y,x),y-=a/b*x;
}
bool work1(int a,int b,int c,int &x,int &y)
{
if(c%__gcd(a,b)!=0)return false;
exgcd(a,b,x,y);
x*=(c/__gcd(a,b)),y*=(c/__gcd(a,b));
return true;
}
int lcm(int x,int y)
{
return x/__gcd(x,y)*y;
}
int excrt(int n)
{
int m1=m[1],m2,a1=a[1],a2,k1,k2,tx;
for(int i=2;i<=n;i++)
{
a2=a[i],m2=m[i];
if(!work1(m1,m2,a2-a1,k1,k2))return -1;
int g=a2/__gcd(a1,a2);
k1=(k1%g+g)%g;
tx=k1*m1+a1;
a1=tx,m1=lcm(m1,m2);
}
return tx;
}
signed main()
{
int n=in();
for(int i=1;i<=n;i++)m[i]=in(),a[i]=in();
out(excrt(n));
return 0;
}