#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
int n,w[55];
LL f[55][55][35];
void add(LL a[],LL b[])
{
static LL c[35];
memset(c,0,sizeof c);
for(int i=0,t=0;i<35;i++)t+=a[i]+b[i],c[i]=t%10,t/=10;
memcpy(a,c,sizeof c);
}
void mul(LL a[],LL b)
{
static LL c[35];
memset(c,0,sizeof c);
LL t=0;
for(int i=0;i<35;i++)t+=a[i]*b,c[i]=t%10,t/=10;
memcpy(a,c,sizeof c);
}
int cmp(LL a[],LL b[])
{
for(int i=34;i>=0;i--)if(a[i]>b[i])return 1;else if(a[i]<b[i])return -1;
return 0;
}
void print(LL a[])
{
int k=34;
while(k&&!a[k])k--;
while(k>=0)printf("%d",a[k--]);
printf("\n");
}
int main()
{
scanf("%d",&n);
int i,len,l,r,k;
for(i=1;i<=n;i++)scanf("%d",&w[i]);
LL temp[35];
for(len=3;len<=n;len++)for(l=1;l+len-1<=n;l++){
r=l+len-1,f[l][r][35-1]=1;
for(k=l+1;k<r;k++){
memset(temp,0,sizeof temp);
temp[0]=w[l];
mul(temp, w[k]),mul(temp, w[r]);
add(temp, f[l][k]),add(temp, f[k][r]);
if(cmp(f[l][r],temp)>0)memcpy(f[l][r], temp, sizeof temp);
}
}
print(f[1][n]);
return 0;
}