#include <bits/stdc++.h>
const std::string FILE_NAME = "podm";
std::ifstream fin(FILE_NAME + ".in");
std::ofstream fout(FILE_NAME + ".out");
using ll = long long;
int main() {
std::ios_base::sync_with_stdio(false);
fin.tie(nullptr);
fout.tie(nullptr);
int n;
fin >> n;
std::vector<ll> a(n + 1);
for(int i = 0; i <= n; ++i) fin >> a[i];
// dp[i][j] = numarul minim de inmultiri
// luand doar subsecventa [i][j] de matrici
std::vector<std::vector<ll>> dp(n + 1, std::vector<ll>(n + 1, 0));
for(int i = 1; i <= n; ++i) dp[i][i] = 0;
for(int i = 1; i <= n - 1; ++i) dp[i][i + 1] = a[i - 1] * a[i] * a[i + 1];
for(int d = 2; d < n; ++d) {
for(int i = 1; i <= n - d; ++i) {
dp[i][i + d] = LLONG_MAX;
for(int k = i; k < i + d; ++k) {
dp[i][i + d] = std::min(
dp[i][i + d],
dp[i][k] + dp[k + 1][i + d] + a[i - 1] * a[k] * a[i + d]
);
}
}
}
fout << dp[1][n];
return 0;
}