//==*conquerorren*==
// Polygon.cpp : implementation file
//题目:多边形游戏问题
//作者:任嫱
//日期:2007.10.18
#include "stdio.h"
#include "iostream.h"
#define N 3 //顶点数
#define I N+1
#define J N+1
static int m[I][J][2];
static char op[I];
int flags=0;
void MIN_MAX(int n,int i,int s,int j,int *minf,int *maxf)
{
int e[5];
int a=m[i][s][0];
int b=m[i][s][1];
int r=(i+s-1)%n+1;
int c=m[r][j-s][0];
int d=m[r][j-s][1];
if(s==1) flags=1;
else flags=0;
if(op[r]=='a')
{
*minf=a+c;
*maxf=b+d;
}
else
{
e[1]=a*c;
e[2]=a*d;
e[3]=b*c;
e[4]=b*d;
*minf=e[1];
*maxf=e[1];
for(int r=2;r<5;r++)
{
if(*minf>e[r]) *minf=e[r];
if(*maxf<e[r]) *maxf=e[r];
}
}
}
int Poly_Max(int n)
{
int minf,maxf;
for(int j=2;j<=n;j++)
for(int i=1;i<=n;i++)
for(int s=1;s<j;s++)
{
MIN_MAX(n,i,s,j,&minf,&maxf);
if(m[i][j][0]>minf || flags==1) m[i][j][0]=minf;
if(m[i][j][1]<maxf || flags==1) m[i][j][1]=maxf;
}
int temp=m[1][n][1];
for(int i=2;i<=n;i++)
if(temp<m[i][n][1]) temp=m[i][n][1];
return temp;
}
void main()
{
cout<<" enter: op"<<endl;
cout<<" value"<<endl;
for(int i=1;i<I;i++)
{
cin>>op[i];
cin>>m[i][1][0];
m[i][1][1] = m[i][1][0];
for(int j=2;j<I;j++)
{
m[i][j][0]=0;
m[i][j][1]=0;
}
}
cout<<Poly_Max(N)<<endl;
}