#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#define MAXN 350
using namespace std;
int n;
int in[MAXN], dp[MAXN][MAXN];
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n+1; i++)
{
scanf("%d", &in[i]);
}
memset(dp, 0x3f, sizeof(dp));//dp[i][j]表示从第i到第j个矩阵相乘所需的最少次数,因而初始化为无穷大
for (int i = 1; i <= n+1; i++)
{
dp[i][i] = 0;//dp[i][i]显然没有意义,初始化为0
}
for (int i = 2; i <= n; i++)//区间长度
{
for (int j = 1, k = i + j - 1; k <= n; k++, j++)//j为区间左端,k为右端
{
for (int l = j; l < k; l++)//l分割区间[j,k]
{
dp[j][k] = min(dp[j][k], dp[j][l] + dp[l + 1][k] + in[j] * in[l + 1] * in[k + 1]);
}
}
}
printf("%d\n", dp[1][n]);
return 0;
}