// iostream is too mainstream #include // bitch please #include #include #include #include #include #include #include #include #include #include #include #include #define dibs reserve #define OVER9000 1034567890 #define ALL_THE(CAKE,LIE) for(auto LIE =CAKE.begin(); LIE != CAKE.end(); LIE++) #define tisic 47 #define soclose 1e-9 #define chocolate win // so much chocolate #define patkan 9 #define ff first #define ss second #define abs(x) ((x < 0)?-(x):x) #define uint unsigned int #define dbl long double using namespace std; // mylittledoge int main() { cin.sync_with_stdio(0); cin.tie(0); int N,M; cin >> N >> M; vector< vector > G(N+M); vector ch(N+M); string s; cin >> s; for(int i =0; i < N; i++) ch[i] =s[i]-'a'; for(int i =1; i < N; i++) { int a,b; cin >> a >> b; G[--a].push_back(--b); G[b].push_back(a);} vector< pair > quer(1000000); int Q =0; for(int i =0; i < M; i++) { int t; cin >> t; if(t == 2) { int x; cin >> x >> s; ch[N] =s[0]-'a'; G[N].push_back(--x); G[x].push_back(N); N++; continue;} cin >> quer[Q].ff >> quer[Q].ss; Q++;} vector< vector > par(20,vector(N,-1)); vector dep(N,0); queue q; q.push(0); par[0][0] =0; vector< vector > sum(26,vector(N,0)); while(!q.empty()) { sum[ch[q.front()]][q.front()]++; ALL_THE(G[q.front()],it) if(par[0][*it] == -1) { par[0][*it] =q.front(); dep[*it] =1+dep[q.front()]; for(int i =0; i < 26; i++) sum[i][*it] =sum[i][q.front()]; q.push(*it);} q.pop();} for(int i =1; i < 20; i++) for(int j =0; j < N; j++) par[i][j] =par[i-1][par[i-1][j]]; for(int i =0; i < Q; i++) { int u =quer[i].ff-1, v =quer[i].ss-1; if(dep[u] > dep[v]) swap(u,v); int a =u, b =v; for(int k =19; k >= 0; k--) if(dep[par[k][b]] >= dep[a]) b =par[k][b]; for(int k =19; k >= 0; k--) if(par[k][b] != par[k][a]) { b =par[k][b]; a =par[k][a];} if(a != b) a =par[0][a]; int ans =0; for(int j =0; j < 26; j++) { if(a == 0) {if((sum[j][u]+sum[j][v]-sum[j][a])%2 != 0) ans++;} else {if((sum[j][u]+sum[j][v]-sum[j][a]-sum[j][par[0][a]])%2 != 0) ans++;} } cout << ans << "\n";} return 0;} // look at my code // my code is amazing