import java.math.*

fun main(args: Array<String>) {
    val N = readInputLine().toInt()
    
    var TNum = 1L
    var ANum = 1L
    
    for (i in 1..N) {
        val (Ti, Ai) = readInputLine().split(" ").map { it.toLong() }
        var newTNum = TNum
        var newANum = ANum
        if (Ti == Ai) {
            // Ti = Ai = 1のパターン
            newTNum = Math.max(TNum, ANum)
            newANum = Math.max(TNum, ANum)
        } else if (Ti > Ai) {
            // Aiをベースに枚数を確定
            // ANum = ceil(ANum / Ai) * Ai
            newANum = (ANum / Ai + if (ANum % Ai != 0L) 1L else 0L) * Ai
            newTNum = newANum / Ai * Ti
        } else {
            // Tiをベースに枚数を決定
            newTNum = (TNum / Ti + if (TNum % Ti != 0L) 1L else 0L) * Ti
            newANum = newTNum / Ti * Ai
        }

        // 上記方法で推定した枚数が減少している場合は再計算
        if (newANum < ANum) {
            newANum = (ANum / Ai + if (ANum % Ai != 0L) 1L else 0L) * Ai
            newTNum = newANum / Ai * Ti
        }
        if (newTNum < TNum) {
            newTNum = (TNum / Ti + if (TNum % Ti != 0L) 1L else 0L) * Ti
            newANum = newTNum / Ti * Ai            
        }
        
        TNum = newTNum
        ANum = newANum
    }
    
    println(TNum + ANum)
}

fun readInputLine(): String {
    return readLine()!!
}
