RT,
#include <cstdio>
#include <stack>
#define UP(i, s, e) for(auto i=(s); i!=(e); ++i)
namespace m{
using namespace std;
typedef long long ll; typedef unsigned long long ull;
ll exgcd(ll a, ll b, ll &x, ll &y){
if (!b) {
x = 1;
y = 0;
return a;
}
int d = exgcd(b, a % b, x, y);
int t = x;
x = y;
y = t - (a / b) * y;
return d;
}
ll mul(ll x, ll y, ll modn){
// return (__int128)x*y%modn; \
/*
bool nag = false;
if(x<0) x=-x, nag=!nag;
if(y<0) y=-y, nag=!nag;
ll ans = 0;
while(y){
if(y&1) ans = (ans+x) % modn;
x = (x<<1)%modn;
y>>=1;
}
return nag? -ans :ans;
//*/
}
constexpr int N = 1e5;
stack<ll> ix, ip;
int in;
void solve(){
scanf("%d", &in);
UP(i, 0, in){
ll x, p;
scanf("%lld%lld", &p, &x);
ix.push(x), ip.push(p);
}
for(;;){
ll x1, x2, p1, p2;
x1 = ix.top(), p1 = ip.top();
ix.pop(); ip.pop();
if(ix.empty()){
printf("%lld", (x1+p1)%p1);
break;
}
x2 = ix.top(), p2 = ip.top();
ix.pop(); ip.pop();
ll p, q;
ll g = exgcd(p1, p2, p, q);
ll m = p1/g*p2;
p = mul(p, (x2-x1)/g, p2/g);
ix.push((mul(p1, p, m)+x1+m)%m);
ip.push(m);
}
}
}
int main(){m::solve(); return 0;}