
n = gets.to_i
p = []
n.times do |i|
  p[i], p[i+1] = gets.split.map &:to_i
end

def p.matrix_chain_multiplication(n)
  m = Array.new(n+1) { Array.new(n+1, 0)} # m[1][n]..m[n][1]までの計算結果を保持する2次元配列i==jのとき0とするため、0で初期化した。
  for length in 2..n                      # 連鎖行列積の長さをlengthとおく
    for i in 1..(n - length +1)           # 部分行列積の初項の位置を表すi
      j = i + length - 1                  # 部分行列積の末項の位置を表すj
      m[i][j] = Float::INFINITY
      for k in i..j-1                     # i ≦ k < j のk
        m[i][j] = [m[i][j], m[i][k] + m[k+1][j] + self[i-1] * self[k] * self[j]].min
      end
    end
  end
  m[1][n]
end

puts p.matrix_chain_multiplication(n)

