| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 
 | #include <cstdio>#include <bits/stdc++.h>
 #define rep(i,a,n) for(int i=a;i<n;++i)
 #define per(i,a,n) for(int i=n-1;i>=a;--i)
 #define clint(x,a) memset(x,a,sizeof(int)*n)
 #define clll(x,a) memset(x,a,sizeof(ll)*n)
 #define pb push_back
 #define np next_permutation
 #define mp make_pair
 #define fi first
 #define se second
 #define INF 0x3f3f3f3f
 #define EPS 1e-8
 #define PI acos(-1.0)
 using namespace std;
 const int maxn=1e5+5;
 const int maxm=1e5+5;
 const int maxl=26;
 
 
 
 typedef long long ll;
 typedef unsigned long long ull;
 typedef vector<int> vi;
 typedef pair<int,int> pii;
 typedef pair<string,string> pss;
 
 int t,n;
 struct Matrix{
 int a,b;
 Matrix(int a=0,int b=0):a(a),b(b){}
 }m[26];
 int main(){
 ios::sync_with_stdio(false);
 cin>>n;
 rep(i,0,n){
 char c;
 cin>>c;
 cin>>m[c-'A'].a>>m[c-'A'].b;
 }
 
 string str;
 while(cin>>str){
 stack <Matrix> s;
 bool flag=0;
 int ans=0;
 int len=str.length();
 rep(i,0,len){
 if(isalpha(str[i])){
 if(flag) break;
 s.push(m[str[i]-'A']);
 }
 else if(str[i]==')'){
 Matrix m1,m2;
 if(flag) break;
 m1=s.top();s.pop();
 m2=s.top();s.pop();
 if(m1.a!=m2.b){
 flag=1;
 break;
 }
 else{
 ans+=m2.a*m1.b*m1.a;
 s.push(Matrix(m2.a,m1.b));
 }
 
 }
 }
 if(flag) cout<<"error"<<endl;
 else cout<<ans<<endl;
 }
 
 }
 
 |