#include<iostream> #include<vector> #include<bitset> using namespace std; #define NMAX 200005 #define pb push_back //ifstream cin("date.in"); //ofstream cout("date.out"); vector <int> v[NMAX]; bitset <256> ap; bitset <NMAX> viz; int n,m,t,x,y; char a[NMAX],ch; int dfs(int nod, int dest) { int i,fiu; viz[nod]=1; for (i=0;i<v[nod].size();++i) { fiu=v[nod][i]; if (!viz[fiu]) { ap[a[fiu]]=~ap[a[fiu]]; if (fiu==dest) { int cont=0; for (int j='a';j<='z';++j) if (ap[j]) ++cont; return cont; } int rez=dfs(fiu,dest); if (rez!=-1) return rez; ap[a[fiu]]=~ap[a[fiu]]; } } return -1; } int main() { int i; cin>>n>>m>>(a+1); for (i=1;i<n;++i) { cin>>x>>y; v[x].pb(y); v[y].pb(x); } for (i=1;i<=m;++i) { cin>>t>>x; if (t==2) { cin>>ch; a[++n]=ch; v[n].pb(x); v[x].pb(n); } else { cin>>y; ap.reset(); viz.reset(); ap[a[x]]=1; cout<<dfs(x,y)<<"\n"; } } return 0; }