#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define rep(i, a, b) for(int i = (int)(a); i <= (int)(b); ++i)
#define _rep(i, a, b) for(int i = (int)(a); i >= (int)(b); --i)
const int maxn = 1e6 + 5;
const LL mod = 1e9 + 7;
LL rd(){ LL ans = 0; char last = ' ', ch = getchar();
while(!isdigit(ch))last = ch, ch = getchar();
while(isdigit(ch))ans = (ans << 1) + (ans << 3) + (ch ^ 48), ch = getchar();
if(last == '-')ans = -ans; return ans;
}
int read(){ int ans = 0; char last = ' ', ch = getchar();
while(!isdigit(ch))last = ch, ch = getchar();
while(isdigit(ch))ans = (ans << 1) + (ans << 3) + (ch ^ 48), ch = getchar();
if(last == '-')ans = -ans; return ans;
}
/*---------------------------------the head----------------------------------*/
LL ex_gcd(LL a, LL p, LL &x, LL &y){
if(!p){
x = 1; y = 0; return a;
}
LL d = ex_gcd(p, a % p, y, x);
y -= (a / p) * x; return d;
}
LL mul(LL a, LL b, LL p){
LL ans = 0;
while(b){
if(b & 1)ans = (ans + a) % p;
a = (a + a) % p;
b >>= 1;
}
return ans;
}
LL n;
LL c[maxn], m[maxn];
LL ex_CRL(){
LL M1 = m[1], C1 = c[1];
rep(i, 2, n){
LL x, y;
LL M2 = m[i], C2 = c[i], C = C2 - C1, d = ex_gcd(M1, M2, x, y);
C = (C % M2 + M2) % M2; x = (x % (M2 / d) + M2 / d) % (M2 / d);
if(C % d){return -1;}
// x = ((x * (C / d)) % (M2 / d) + (M2 / d) ) % (M2 / d);
x = mul(x, C / d, M2 / d);
C1 = x * M1 + C1;
M1 = M1 * (M2 / d);
C1 = (C1 % M1 + M1) % M1;
}
return (C1 % M1 + M1) % M1;
}
int main(){
freopen("in.txt", "r", stdin);
n = rd();
rep(i, 1, n)m[i] = rd(), c[i] = rd();
cout << ex_CRL() << endl;
return 0;
}
// M1 = M1 * (M2 / d); 该句 中 M2 / d 不叫括号后三个点就T了 加了括号就对了 迷了