#include #include #include using namespace std; vector > v(26); char word[400001]; struct node { node *p; node *l; int v; }; void push(node * p, int i) { if(word[i]=='.') { if(p->p ==NULL) { p->p = new node; p->p->p = NULL; p->p->l = NULL; p->p->v = 0; } push(p->p, i+1); } else if(word[i]=='-') { if(p->l ==NULL) { p->l = new node; p->l->p = NULL; p->l->l = NULL; p->l->v = 0; } push(p->l, i+1); } else { p->v++; } } int calculate(node * p) { int r=0,l=0; r=(p->p !=NULL) ? calculate(p->p) : p->v; l=(p->l !=NULL) ? calculate(p->l) : p->v; return r>l?r:l; } int main() { node *p = new node; p->p = NULL; p->l = NULL; p->v = 0; for(int i=0;i<26;i++) { v[i].second=new char[5]; cin>>v[i].first >>v[i].second; } int n=0; cin>>n; char w[100001]; for(int i=0;i>w; int index = 0; for(int j=0;w[j]>='a' && w[j]<='z';j++) { for(int ii =0;v[w[j]-'a' ].second[ii]=='.' || v[w[j]-'a' ].second[ii]=='-';ii++) word[index++] = v[w[j]-'a' ].second[ii]; word[index]='\0'; } push(p,0); } cout<