#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
struct equ
{
long long remainder;
long long model;
};
long long w1,w2,W1,W2;int T;
queue<equ> n;
equ ans,a,b;
long long ll;
long long gcd(long long x,long long y)
{
for(;(x!=0)&&(y!=0);)
{
x%=y;
swap(x,y);
}
return (x+y);
}
long long lcm(long long x,long long y)
{
return (x/gcd(x,y)*y);
}
void bezout(long long a,long long b,long long &s,long long &t)
{
long long r1=a,r2=b,s1=1,s2=0,t1=0,t2=1;
long long q,r;
while(r2>0)
{
q=r1/r2;
r=r1-(q*r2);
r1=r2;
r2=r;
s=s1-(q*s2);
s1=s2;
s2=s;
t=t1-(q*t2);
t1=t2;
t2=t;
}
s=s1;
t=t1;
}
void work()
{
for(;;)
{
if(n.size()==1)
{
return;
}
else
{
a=n.front();n.pop();
b=n.front();n.pop();
long long s=0,t=0;
bezout(a.model,b.model,s,t);
ll=lcm(a.model,b.model);
n.push((equ){((s*(b.remainder-a.remainder)/gcd(a.model,b.model)*a.model+a.remainder)%ll+ll)%ll,ll});
}
}
}
int main()
{
scanf("%d",&T);
for(int i=0;i<T;i++)
{
scanf("%lld%lld",&w1,&w2);
n.push((equ){w2,w1});
}
work();
ans=n.front();
printf("%lld",(ans.remainder)%ll);
return 0;
}