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