//Accepted 200 KB 0 ms
//dp区间
//dp[i][j]=min(dp[i][k]+dp[k][j]+a[i]*a[k]*a[j]) i<k<j
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
;
;
int dp[imax_n][imax_n];
int a[imax_n];
int n;
int min(int a,int b)
{
return a<b?a:b;
}
void Dp()
{
;i<=n-;i++)
dp[i][i+]=a[i]*a[i+]*a[i+];
;l<=n;l++)
{
;i<=n;i++)
{
;
if (j>n) break;
dp[i][j]=Pinf;
;k<j;k++)
dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+a[i]*a[k]*a[j]);
//printf("dp[%d][%d]=%d\n",i,j,dp[i][j]);
}
}
printf(][n]);
}
int main()
{
while (scanf("%d",&n)!=EOF)
{
;i<=n;i++)
scanf("%d",&a[i]);
Dp();
}
;
}