fun main(args: Array<String>) {
    val n = readLine()?.toInt() ?: return
    val inputMatrix = List(n) {
        val input = readLine()?.split(" ".toRegex())?.map(String::toInt) ?: return
        return@List input[0] to input[1]
    }
    val matrixChain = inputMatrix.map { it.first }.plus(inputMatrix.last().second)
    val multiplicater = MatrixChainMultiplicater(matrixChain)
    println(multiplicater.getMatrixChainOrder())
}

class MatrixChainMultiplicater(private val matrixData: List<Int>) {
    private val memo = Array(matrixData.size - 1){IntArray(matrixData.size - 1)}
    init {
        for (i in memo.indices) {
            memo[i][i] = 0
        }
    }

    fun getMatrixChainOrder(): Int {
        for (i in 1..memo.lastIndex) {
            for (j in 0..memo.lastIndex - i) {
                val row = j
                val column = j + i
                val costs = arrayListOf<Int>()
                for (k in row until column) {
                    costs.add(memo[row][k] + memo[k + 1][column] + matrixData[row] * matrixData[k + 1] * matrixData[column + 1])
                }
                memo[row][column] = costs.min() ?: 0
            }
        }
        return memo.first().last()
    }
}
