/* Keep It Simple! */ #include #include #include #include #include #include #include #include #include #include using namespace std; #ifndef ONLINE_JUDGE ifstream cin("data.in"); ofstream cout("data.out"); #else #include #endif // ONLINE_JUDGE #define ll long long #define mp make_pair #define fi first #define se second #define pb push_back typedef pair pii; typedef pair pll; const int kMaxN = 100005; int n,m; vector G[kMaxN]; string letter,aux; int lvl[kMaxN]; int dad[kMaxN]; int seen[30]; void DFS(int node, int level,int father) { lvl[node] = level; dad[node] = father; for(int i = 0; i lvl[y]) { x = dad[x]; ++seen[letter[x-1]-'a']; } else { y = dad[y]; ++seen[letter[y-1]-'a']; } } int ans = 0; for(int i=0; i<=('z'-'a'); ++i) if(seen[i]%2) ++ans; cout << ans+1 << '\n'; return; } void Solve() { cin >> n >> m >> letter; int x,y; for(int i=1; i> x >> y; G[x].pb(y); G[y].pb(x); } DFS(1,0,0); int type; char meh; for(int i=1; i<=m; ++i) { cin >> type; if(type == 2) { cin >> x >> meh; letter.pb(meh); int deb = letter.size(); G[x].pb(letter.size()); G[letter.size()].pb(x); lvl[letter.size()] = lvl[x]+1; dad[letter.size()] = x; } else if(type == 1) { cin >> x >> y; LCA(x,y); } } } int main() { Solve(); return 0; }