#include <fstream>
#include <cmath>
#include <algorithm>
#include <queue>
#include <deque>
#include <string>
#include <unordered_map>
#include <vector>
#include <stack>
#include <deque>
using namespace std;
ifstream cin("eval.in");
ofstream cout("eval.out");
stack<long long> st;
const long long ad=1e15, sc=ad+1, ori=ad+2, imp=ad+3, par=ad+4, pat=ad+5, minu=ad+6, plu=ad+7;
long long v[26];
void aplica()
{
while(!st.empty())
{
long long x=st.top();
st.pop();
if(st.empty())
{
st.push(x);
return;
}
if(st.top()==minu)
{
st.pop();
st.push(-x);
}
else if(st.top()==plu)
{
st.pop();
st.push(x);
}
else if(st.top()==ori)
{
st.pop();
x*=st.top();
st.pop();
st.push(x);
}
else
{
st.push(x);
return;
}
}
}
void aduna()
{
long long x=st.top();
st.pop();
if(!st.empty() && (st.top()==ad || st.top()==sc))
{
long long c=st.top();
st.pop();
long long y=st.top();
st.pop();
if(c==ad)
st.push(y+x);
else
st.push(y-x);
}
else
st.push(x);
}
int main()
{
int n;
string s;
cin >> n;
for(int i=0; i<n; i++)
cin >> v[i];
cin >> s;
bool unar=true;
for(int i=0; i<(int)s.size(); i++)
{
if(s[i]>='a' && s[i]<='z')
{
st.push(v[s[i]-'a']);
aplica();
unar=false;
}
else if(s[i]=='(')
{
st.push(par);
unar=true;
}
else if(s[i]=='[')
{
st.push(pat);
unar=true;
}
else if(s[i]==')' || s[i]==']')
{
aduna();
long long x=st.top();
st.pop();
st.pop();
if(s[i]==']')
x*=x;
st.push(x);
aplica();
unar=false;
}
else if(s[i]=='*')
{
st.push(ori);
unar=true;
}
else if(unar)
{
if(s[i]=='-')
st.push(minu);
else
st.push(plu);
}
else
{
aduna();
if(s[i]=='+')
st.push(ad);
else
st.push(sc);
unar=true;
}
}
aduna();
cout << st.top();
return 0;
}