
--assume ax + by =1 , a>0 ,b>0 ,mut_prime a b
sp_case_solver::Int -> Int -> (Int ,Int)
sp_case_solver 1 0 = (1,0)
sp_case_solver 0 1 = (0,1)
sp_case_solver a b = let red_a = b       in
                     let red_b = mod a b in
                     let (x',y') = sp_case_solver red_a red_b  in
                     let x = y' in
                     let y = x'-(x*(div a b)) in
                     (x,y)


--以上は互いに素な正整数係数不定方程式の解を探索する。


--assume ax+ by = c , a>0 ,b>0, mut_prime a b
pos_case_solver::Int -> Int -> Int -> (Int,Int)
pos_case_solver a b 0 = (0,0)
pos_case_solver a b 1 = sp_case_solver a b
pos_case_solver a b c = let (x,y) = pos_case_solver a b 1 in
                        (x*c,y*c)

--以上はcの値による一般化


--n=1では比の値の和が最小である。
--n>1以降は直前の最小の可能性から、それぞれT,A氏がx,y票獲得して、t_k,a_kになったとして、
--x_(k-1)+x:y_(k-1)+y=t_k:a_k
--(x_(k-1)+x)a_k=(y_(k-1)+y)t_k
--a_k x - t_k y = y_(k-1)t_k-x_(k-1)a_k
--この不定方程式の最小解x,yを順次加える貪欲法で到達する。
--これが最小である理由は、各ステップの比条件の他の可能性は、この解の定数倍しかないことによる。
--よって第一係数が正、第二係数が負である不定一次方程式のa x + b y = c（a>0,b<0） の最小解を探索すればよい
--以下この状況でのみ動く関数を作る。
--方針は、特殊解x,yを得てから、ベクトル(-b,a)*lを足し引きすることで探索する。

--assume ax+by =c ,mut_prime a b a>0 ,b<0, return minimum positive ans x,y
pos_min_solver::Int -> Int -> Int ->(Int,Int)
pos_min_solver a b c = let (x,y')= pos_case_solver a (-b) c in
                       let y= (-y') in
                       if  ((x>=0)&&(y>=0)) then let l = min (div x (-b)) (div y a) in (x-(l*(-b)),y-(l*a))
                  else if  ((x<0)&&(y>0)) then let l = (div (-x) (-b))+1 in (x-(l*b),y+(l*a))
                  else if  ((x>0)&&(y<0)) then let l = (div (-y) a)+1    in (x-(l*b),y+(l*a))
                  else let l = (max (div (-x) (-b)) (div (-y) a))+1      in (x-(l*b),y+(l*a))

--今までの最小集計と、次の比を得て、次の最小集計を返す。
step::(Int,Int)-> (Int,Int) -> (Int,Int)
step (t_tot,a_tot) (t,a) = let (x,y) = pos_min_solver a (-t) ((a_tot*t)-(t_tot*a)) in
                           (t_tot+x,a_tot+y)

solver::[(Int,Int)]-> Int
solver (s:xs) = let (x,y) = foldl step s xs in x+y


nget::Int -> IO [(Int,Int)]
nget 0 = return []
nget n = do
    tac<-getLine
    let t:a:[] =  map read (words tac)::[Int]
    rest<-nget (n-1)
    return ((t,a):rest)

main::IO()
main = do
  nc<- getLine
  let n = read nc ::Int
  dat<-nget n
  print (solver dat)
