#include <iostream>
#include <vector>
#include <stack>
using namespace std;

vector<int> cal(vector<int> x, vector<int> y, int &sum);
//本题只考虑2个矩阵,就没那么复杂,(多个矩阵相乘顺序不定)按题目意思,也是看了其他答主的
int main() {
    int n;
    while (cin >> n) {
        vector<vector<int> > v(n, vector<int>(2, 0));//初始化
        for (int i = 0 ; i < n ; i++) {
            cin >> v[i][0] >> v[i][1];//各矩阵行、列数
        }

        string s;//运算顺序
        cin >> s;

        int len = s.size();
        int k = 0;
        int count = 0;
        stack<vector<int> > st;//用来存储行列数
        for (int i = 0; i < len; i++) {
            if (s[i] == '(') { //遇到左括号跳过
                continue;
            } else if(s[i] == ')'){//遇到右括号弹出栈顶元素两次,分别是两个矩阵1、2的行列数
                vector<int> v1 = st.top();//被乘矩阵2的行列数
                st.pop();
                vector<int> v2 = st.top();//矩阵1的行列数
                st.pop();
                st.push(cal(v2, v1, count)); //将1 * 2的结果压入栈中,最后一次压入栈不影响结果
            }else{//字母入栈
                st.push(v[k++]);
            }
        }
        cout << count << endl;
    }
}

vector<int> cal(vector<int> x, vector<int> y, int& sum) {
    sum += x[0] * x[1] * y[1];//矩阵x的行数*列数*矩阵y的列数
    x[1] = y[1];//新矩阵的列为矩阵y的列
    return x;
}

// 64 位输出请用 printf("%lld")