#include <fstream> #include <vector> using namespace std; ifstream fin("odd.in"); ofstream fout("odd.out"); int fr[31],n,m,ok,nrIMP,x,y,cer,nrq; char ch; struct graf{int used; char ch; vector<int>lst;} nod[200005]; void calc() { nrIMP=0; for(int i=0;i<=30;i++) if(fr[i]%2!=0) nrIMP++; } void bkt(int poz) { nod[poz].used=nrq; fr[nod[poz].ch-'a']++; if(poz==y) {ok=1; calc();} else { for(int i=0;i<nod[poz].lst.size();i++) if(nod[nod[poz].lst[i]].used!=nrq) { bkt(nod[poz].lst[i]); if(ok==1) break; } } fr[nod[poz].ch-'a']--; } int query() { bkt(x); return nrIMP; } int main() { fin>>n>>m; fin.get(); for(int i=1;i<=n;i++) fin>>nod[i].ch; for(int i=1;i<=n-1;i++) { fin>>x>>y; nod[x].lst.push_back(y); nod[y].lst.push_back(x); } for(int i=1;i<=m;i++) { fin>>cer; if(cer==1) { ok=0; nrq++; fin>>x>>y; fout<<query()<<'\n'; } else { fin>>x>>ch; nod[++n].ch=ch; nod[n].lst.push_back(x); nod[x].lst.push_back(n); } } return 0; }