int n, a[kMaxN], b[kMaxN]; int M = 1; __int128 res, x, y;
__int128 mod(__int128 x, __int128 m){ return (x % m + m) % m; }
__int128 add(__int128 x, __int128 y, __int128 m){ return (x + y >= m) ? (x + y - m) : (x + y); }
__int128 times(__int128 x, __int128 y, __int128 m){ return1ll * x * y % m; }
__int128 gcd(__int128 m, __int128 n){ return (!n) ? m : gcd(n, m % n); }
__int128 lcm(__int128 m, __int128 n){ return m / gcd(m, n) * n; }
__int128 exgcd(__int128 a, __int128 b, __int128& x, __int128& y){ if (!b) { x = 1, y = 0; return a; } __int128 d = exgcd(b, a % b, y, x); y -= a / b * x; return d; }
__int128 inv(__int128 a, __int128 m){ __int128 x, y; exgcd(a, m, x, y); returnmod(x, m); }
signedmain(){ cin >> n; for (int i = 1; i <= n; ++i) { cin >> a[i] >> b[i]; } res = b[1], M = a[1]; for (int i = 2; i <= n; ++i) { __int128 s = mod(b[i] - mod(res, a[i]), a[i]); __int128 d = exgcd(M, a[i], x, y); __int128 m = M; M = lcm(M, a[i]); x = mod(times(x, s / d, a[i]), a[i]); // cout << "***" << i << ' ' << res << endl; res += times(x, m, M); res = mod(res, M); } // cout << exgcd(4, 48, x, y) << endl; cout << (longlong)res << endl; return0; }