//中国剩余定理 因子非互素,所以只能两个两个得来;
// 证明:
//x = a1(mod n1);
//x = a2(mod n2);
//因为 n1- n2 不互素;
//so : x = n1* k1 + a1;
// x = n2 *k2 + a2;
//两式相减
//n1*k1 = n2*k2 + a2-a1;
//n1 *k1 = a2-a1(mod n2);
//若k1 有解,则gcd(n1,n2)|(a2-a1);
//设 d = gcd(n1,n2);
//n1*k1/d = (a2-a1)/d (mod n2/d);
//k1 = (a2-a1)/d * (n1/d)^-1 (mod n2/d);
//则:x = n1*((a2-a1)/d *(n1/d)^-1 )+k(n2/d) )+ a1;
//x= n1*(a2-a1)*(n1/d)^-1 /d + a1(mod n1n2/d);
//令 t =n1*(a2-a1)*(n1/d)^-1 ,n = n1n2/d;
//x = tn1 + a2(mod n);
//所以所有方程可以合并成一个。。。
1 #include"iostream"
2 using namespace std;
3
4 long long gcd(long long a,long long b,long long &x,long long &y ){
5 if(b==0){
6 x = 1;
7 y = 0;
8 return a;
9 }
10 long long ans = gcd(b,a%b,x,y);
11 long long t = x;
12 x = y;
13 y = t- a/b*y;
14 return ans;
15 }
16 int main(){
17 long long n;
18 while(cin>>n){
19 long long m1,r1,m2,r2,a,b,x,y;
20 int flag = 1,i;
21 cin>>m1>>r1;
22 for(i=1;i<n;i++){
23 cin>>m2>>r2;
24 if(!flag)
25 continue;
26 a = gcd(m1,m2,x,y);
27 if((r2-r1)%a!=0){
28 flag = 0;
29 continue;
30 }
31 x = x*(r2-r1)/a;
32 b = m2/a;
33 x= (x%b+b)%b;
34 r1 = r1 + m1*x;
35 m1 = (m1*m2)/a;
36 }
37 if(flag)
38 cout<<r1<<endl;
39 else
40 cout<<-1<<endl;
41 }
42 return 0;
43 }