#include <iostream> #define DIM 200001 #include <vector> using namespace std; int n, m, prez[30], res, x, y, vf, nr_node; char ch; vector <int> node[DIM]; short vis[DIM], val[DIM], tip; int dfs(int vfc) { vis[vfc]=1; for(int i=0; i<node[vfc].size(); ++i) { if(vis[node[vfc][i]]==0) { prez[val[node[vfc][i]]]++; if(node[vfc][i]==y) { res=0; for(int k=0; k<=26; ++k) if(prez[k]%2) res++; break; } dfs(node[vfc][i]); prez[val[node[vfc][i]]]--; } } return res; } int main() { cin>>n>>m; nr_node=n; cin.get(); for(int i=1; i<=n; ++i) { ch=cin.get(); val[i]=(int)ch-97; } for(int i=1; i<=n-1; ++i) { cin>>x>>y; node[x].push_back(y); node[y].push_back(x); } for(int j=1; j<=m; ++j) { cin>>tip; if(tip==2) { cin>>vf; cin.get(); ch=cin.get(); nr_node++; val[nr_node]=(int)ch-97; node[vf].push_back(nr_node); node[nr_node].push_back(vf); } if(tip==1) { cin>>x>>y; prez[val[x]]++; cout<<dfs(x)<<"\n"; for(int k=0; k<=26; ++k) { prez[k]=0; } for(int k=1; k<=nr_node; ++k) vis[k]=0; } } return 0; }