#include<iostream> #include<vector> using namespace std; //ifstream cin("tree.in"); //ofstream cout("tree.out"); int t[300000],l[300000],parc[300000]; char c[300000]; vector <int> a[300000]; char s; int n,m,y,x; void parcu(int x,int v){ parc[x]=1; l[x]=v; for(int i=0;i<a[x].size();i++) if(parc[a[x][i]]!=1){ t[a[x][i]]=x; parcu(a[x][i],v+1); } } int main(){ cin>>n>>m; for(int i=1;i<=n;i++)cin>>c[i]; for(int i=1;i<n;i++)cin>>x>>y,a[x].push_back(y),a[y].push_back(x); parcu(1,0); for(int i=1;i<=m;i++){ cin>>x; if(x==1){ cin>>x>>y; int li[40]={0}; while(x!=y){ if(l[x]>l[y]) { li[c[x]-'a']++;//cout<<"x-"<<x<<endl; x=t[x]; }else{ li[c[y]-'a']++; // cout<<"y-"<<y<<endl; y=t[y]; } } //cout<<"x-"<<x<<endl; li[c[x]-'a']++; int ans=0; for(int i=0;i<=30;i++){//<<li[i]<<" "; if(li[i]%2==1)ans++;}//cout<<endl; cout<<ans<<"\n"; }else{ cin>>t[++n];cin>>c[n]; //cout<<c[n]<<endl; l[n]=l[t[n]]+1; } } }