#include #include #include #include #include using namespace std; fstream f("odd.in",ios::in); fstream g("odd.out",ios::out); const int nmax = 100005; vector a[nmax]; vector prec[nmax]; int n,m, x[nmax], i, viz[nmax], lit[30], cer, nod, x1, y, ic, sf,k; char sir[nmax], c; void citire() { cin>>n>>m; cin>>sir; for ( i = 0; i < strlen(sir); i++) { x[i+1] = (int)sir[i] - (int)'a'+1; //g<>x1>>y; a[x1].push_back(y); a[y].push_back(x1); } } void parcurgere() { for (i = 1; i<=26; i++) lit[i] = 0; for (i = 1; i<=n; i++) prec[i].clear(); for (i=1;i<=n;i++) viz[i]=0; queue q; queue q1; q.push(ic); int nc, nr; nc = ic; viz[ic] = 1; //lit[x[ic]]++; /*for (i=1;i<=n;i++) { g<::iterator it=a[i].begin();it!=a[i].end();++it) g<<*it<<" "; g<<'\n'; }*/ while (nc!=sf) { nc = q.front(); q.pop(); for (vector ::iterator it = a[nc].begin(); it!=a[nc].end(); ++it) if (!viz[*it]) { viz[*it]=1; q.push(*it); prec[*it].push_back(nc); //g<<*it<<"\n"; //lit[x[*it]]++; } } q1.push(sf); lit[x[sf]]++; nc = sf; while (nc!=ic) { nc = q1.front(); q1.pop(); //g<::iterator it = prec[nc].begin(); it!=prec[nc].end();++it) { //g<<*it<<" "; q1.push(*it); lit[x[*it]]++; } //g<<"\n"; } nr=0; for (i=1;i<=26;i++) { //g<>cer; if (cer == 2) { n++; cin>>nod>>c; a[nod].push_back(n); a[n].push_back(nod); x[n] = (int)c - (int)'a'+1; } else { cin>>ic>>sf; parcurgere(); } } //for (i=1;i<=n;i++) g<