#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
const long long maxe=1000000000;
#define ll long long
ll minn,maxn,save[1000],f[200][200][2];
ll Min(ll a,ll b,ll c,ll d)
{
ll tmp=maxe;
tmp=min(tmp,a);
tmp=min(tmp,b);
tmp=min(tmp,c);
tmp=min(tmp,d);
return tmp;
}
ll Max(ll a,ll b,ll c,ll d)
{
ll tmp=-maxe;
tmp=max(tmp,a);
tmp=max(tmp,b);
tmp=max(tmp,c);
tmp=max(tmp,d);
return tmp;
}
char st[200];
int n,op[200];
void dfs(int l,int r)
{
ll num=maxe;
ll ans=-maxe;
if(f[l][r][0]==-maxe)
{
if(l==r)
{
f[l][r][0]=save[l];
}
else
{
for(int i=l;i<r;i++)
{
dfs(l,i);
dfs(i+1,r);
if(op[i]==1)
{
num=f[l][i][0]+f[i+1][r][0];
}
if(op[i]==2)
{
num=Max(f[l][i][0]*f[i+1][r][0],f[l][i][1]*f[i+1][r][0],f[l][i][0]*f[i+1][r][1],f[l][i][1]*f[i+1][r][1]);
}
if (num>ans)
ans=num;
}
f[l][r][0]=ans;
}
}
ans=maxe;
if(f[l][r][1]==maxe)
{
if(l==r)
{
f[l][r][1]=save[l];
}
else
{
for(int i=l;i<r;i++)
{
dfs(l,i);
dfs(i+1,r);
if(op[i]==1)
{
num=f[l][i][1]+f[i+1][r][1];
}
if(op[i]==2)
{
num=Min(f[l][i][0]*f[i+1][r][0],f[l][i][1]*f[i+1][r][0],f[l][i][0]*f[i+1][r][1],f[l][i][1]*f[i+1][r][1]);
}
if (num<ans)
ans=num;
}
f[l][r][1]=ans;
}
}
}
int main()
{
minn=maxe;
maxn=-maxe;
scanf("%d",&n);
scanf("%s",st+1);
for(int i=1;i<=2*n;i++)
{
for(int j=1;j<=2*n;j++)
{
f[i][j][1]=maxe;
f[i][j][0]=-maxe;
}
}
for(int i=1;i<=n;i++)
{
if(st[i]=='+')
op[i]=1;
if(st[i]=='*')
op[i]=2;
scanf("%lld",&save[i]);
}
for(int i=n+1;i<=2*n;i++)
{
op[i]=op[i-n];
save[i]=save[i-n];
}
ll ans1=minn;
ll ans2=maxn;
for(int i=1;i<=n;i++)
{
dfs(i,i+n-1);
maxn=max(maxn,f[i][i+n-1][0]);
minn=min(minn,f[i][i+n-1][1]);
}
printf("%lld\n%lld",maxn,minn);
return 0;
}