#include<cstdio> #include<vector> #include<cstring> using namespace std; const int N=100000; vector<int>g[N+1]; int n,m,fin; bool st[27]; char s[N+1]; bool vis[N+1]; bool f; int v[N+1]; void dfs(int dad){ vis[dad]=true; st[v[dad]]=!st[v[dad]]; if(dad==fin){ f=true; return; } for(unsigned int i=0;i<g[dad].size();i++){ int son=g[dad][i]; if(!vis[son]) dfs(son); if(f) return; } st[v[dad]]=!st[v[dad]]; } int main(){ //freopen("std.in","r",stdin); //freopen("std.out","w",stdout); scanf("%d%d\n",&n,&m); gets(s); for(int i=1;i<=n;i++) v[i]=s[i-1]-'a'; for(int i=1;i<n;i++){ int x,y; scanf("%d%d",&x,&y); g[x].push_back(y); g[y].push_back(x); } for(int i=1;i<=m;i++){ int x,y; char z; scanf("%d%d %c",&x,&y,&z); if(x==1){ fin=z-'0'; memset(vis,0,sizeof(vis)); memset(st,0,sizeof(st)); f=false; dfs(y); int r=0; for(int i=0;i<=26;i++) if(st[i]) r++; printf("%d\n",r); } else{ v[++n]=z-'a'; g[y].push_back(n); g[n].push_back(y); } } return 0; }