#include <iostream>
#include <vector>
using namespace std;
long long extendedGCD(long long a, long long b, long long &x, long long &y) {
if (b == 0) {
x = 1;
y = 0;
return a;
}
long long gcd = extendedGCD(b, a % b, y, x);
y -= (a / b) * x;
return gcd;
}
long long chineseRemainderTheorem(const vector<long long> &a, const vector<long long> &b) {
long long M = 1;
for (long long ai : a) {
M *= ai;
}
long long result = 0;
for (size_t i = 0; i < a.size(); i++) {
long long ai = a[i];
long long bi = b[i];
long long Mi = M / ai;
long long x, y;
extendedGCD(Mi, ai, x, y);
long long inverse = (x % ai + ai) % ai;
result = (result + bi * Mi * inverse) % M;
}
return (result + M) % M;
}
int main() {
int n;
cin >> n;
vector<long long> a(n), b(n);
for (int i = 0; i < n; i++) {
cin >> a[i] >> b[i];
}
long long result = chineseRemainderTheorem(a, b);
cout << result << endl;
return 0;
}