#include <iostream>
#include <fstream>
#include <cstdio>
#include <vector>
using namespace std;


long t,x,y,n,m,i,j,l[100000];
bool nr[100000][27];
vector <long> v[100000];
char s[100005],c;

void update(long nod,long ant)
{
    nr[nod][s[nod]-'a']=1-nr[nod][s[nod]-'a'];
    for (int i=0;i<l[nod];i++)
    {
        if (v[nod][i]!=ant)
        {
            for (int j=0;j<=26;j++)
                nr[v[nod][i]][j]=nr[nod][j];
            update(v[nod][i],nod);
        }
    }
}
int main()
{
    cin>>n>>m;
    cin>>s;
    for (i=1;i<=n;i++)
    {
        cin>>x>>y;
        l[x]++;
        v[x].push_back(y);
        l[y]++;
        v[y].push_back(x);
    }
    update(1,0);
    long num;
    for (i=1;i<=m;i++)
    {
        cin>>t;
        if (t==1)
        {
            cin>>x>>y;
            num=0;
            for (j=0;j<=26;j++)
            {
                if ((nr[x][j]+nr[y][j]+nr[1][j])%2==0)
                    num++;
            }
            cout<<num<<'\n';
        }
        else
        {
            scanf("%ld ",&x);
            cin>>c;
            for (j=0;j<=26;j++)
            {
                n++;
                nr[n][j]=nr[x][j];
            }
            nr[n][c-'a']=1-nr[n][c-'a'];
        }
    }

    return 0;
}