#include <stdio.h>
#include <stdlib.h>
#define null 0
int re[101][101],re1[101][101],re2[101][101];
typedef struct node
{
int num;
struct node *next;
} Node;
void main()
{
int E,N; int i;
Node *biaoji;
Node *creat(int N1);
int e(int N1,Node *biaoji,int n);
scanf("%d",&N);
biaoji=creat(N);
for(i=2;i<=N;i++)
if (E<=e(N,biaoji,i)) E=e(N,biaoji,i);
printf("%d\n",E);
}
int e(int N1,Node *biaoji,int n)
{
int pre,now,next,i,temp;
Node *biaoji1[101],*biaoji2[101],*biaoji3[101];
Node* CloneList(Node* pHead);
Node *Del(Node *head, int n);
void PrintList(Node *head);
if (N1>2)
{
if (n==1)
{
biaoji3[N1]=CloneList(biaoji); biaoji2[N1]=CloneList(biaoji); biaoji1[N1]=Del(biaoji3[N1],1);
for(i=1;i<=N1;i++)
{
if(i==N1) {pre=biaoji2[N1]->num; break;}
if(i==1) now=biaoji2[N1]->num;
if(i==2) next=biaoji2[N1]->num;
biaoji2[N1]=biaoji2[N1]->next;
}
re2[N1][n]=pre*now*next;
}
else
if (n==N1)
{
biaoji3[N1]=CloneList(biaoji); biaoji2[N1]=CloneList(biaoji); biaoji1[N1]=Del(biaoji3[N1],N1);
for(i=1;i<=N1;i++)
{
if(i==N1-1) pre=biaoji2[N1]->num;
if(i==N1) {now=biaoji2[N1]->num; break;}
if(i==1) next=biaoji2[N1]->num;
biaoji2[N1]=biaoji2[N1]->next;
}
re2[N1][n]=pre*now*next;
}
else
{
biaoji3[N1]=CloneList(biaoji); biaoji2[N1]=CloneList(biaoji); biaoji1[N1]=Del(biaoji3[N1],n);
for(i=1;i<=N1;i++)
{
if(i==n-1) pre=biaoji2[N1]->num;
if(i==n) now=biaoji2[N1]->num;
if(i==n+1) {next=biaoji2[N1]->num;break;}
biaoji2[N1]=biaoji2[N1]->next;
}
re2[N1][n]=pre*now*next;
}
for(i=1;i<=N1-1;i++)
{ temp=e(N1-1,biaoji1[N1],i); if (re1[N1][n]<=temp) {re1[N1][n]=temp; }}
}
else
if (N1==2)
{
re2[N1][n]=(biaoji->num)*(biaoji->num)*((biaoji->next)->num);
if (re2[N1][n]<(biaoji->num)*((biaoji->next)->num)*((biaoji->next)->num))
re2[N1][n]=(biaoji->num)*((biaoji->next)->num)*((biaoji->next)->num);
re1[N1][n]=0;
}
else
{re2[N1][n]=0; re1[N1][n]=0; }
re[N1][n]=re2[N1][n]+re1[N1][n];
return re[N1][n];
}
Node *creat(int N1)
{
Node *p1=null,*p2=null,*head=null;
int lian=0;
p2=p1=(Node*)malloc(sizeof(Node));
scanf("%d",&p1->num);
while(1)
{
if(lian==0)
head=p1;
else
p2->next=p1;
p2=p1;
lian++;
if(lian>=N1)
break;
p1=(Node*)malloc(sizeof(Node));
scanf("%d",&p1->num);
}
p2->next=null;
return head;
}
Node *Del(Node *head, int n)
{
int lian=0;
Node *p1;
Node *p2;
p1 = head;
if (n==1)
head = p1->next;
else
{
while (1)
{
p2 = p1;
p1 = p1->next;
lian++;
if(lian>=n-1)
break;
}
{
if (p1 == head)
{
head = p1->next;
}
else
{
p2->next = p1->next;
}
}
free(p1);
p1 = NULL;
}
return head;
}
Node* CloneList(Node* pHead)
{
Node* pNode = pHead;
Node* pCloneHead, *pCloneNode;
if (pNode != NULL)
{
pCloneHead = (Node*)malloc(sizeof(Node));;
pCloneHead->num = pNode->num;
pCloneHead->next = NULL;
pCloneNode = pCloneHead;
pNode = pNode->next;
}
while (pNode != NULL)
{
Node* pTempNode =(Node*)malloc(sizeof(Node));
pTempNode->num = pNode->num;
pTempNode->next = NULL;
pCloneNode->next = pTempNode;
pCloneNode = pCloneNode->next;
pNode = pNode->next;
}
return pCloneHead;
}