提交记录
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
typedef long long ll;
const int maxn=107;
int n,a[maxn],ad[maxn];
ll f[maxn][maxn];
char opt;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
cin>>opt;
ad[i]=(opt=='t');
scanf("%d",&a[i]);
}
int n2=n<<1;
for(int i=n+1;i<=n2;i++){
a[i]=a[i-n];
ad[i]=ad[i-n];
}
for(int i=1;i<=n2;i++)
f[i][i]=a[i];
for(int len=2;len<=n;len++)
for(int l=1,r=len;r<=n2;l++,r++)
for(int k=l;k<r;k++)
if(ad[k+1]){
if(f[l][k]+f[k+1][r]>=f[l][r]){
f[l][r]=f[l][k]+f[k+1][r];
}
}
else
f[l][r]=max(f[l][r],f[l][k]*f[k+1][r]);
ll ans=0;
for(int i=1;i<=n;i++)
ans=max(ans,f[i][i+n-1]);
printf("%lld\n",ans);
for(int i=1;i<=n;i++)
if(ans==f[i][i+n-1])
printf("%d ",i);
return 0;
}