#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
#define pb push_back
#define ll long long
const int N=1050;
vector<pair<int,int>>E[N];
int par[N];
int FS(int u){
    if(par[u]==u) return u;
    return par[u]=FS(par[u]);
}
void US(int u,int v) {int x=FS(u),y=FS(v);par[x]=y;}
/*bool res,was[N][N];
void DFS(int u,int v,int parent1,int parent2){
    was[u][v]=true;
    if(u==v || parent1==v || parent2==u) {res=true;return;}
    for(auto i:E[u]){
        for(auto j:E[v]){
            if(i.se==j.se && was[i.fi][j.fi]==false) DFS(i.fi,j.fi,u,v);
        }
    }
}*/
int dp[N][N];
int main()
{
    bool subtask1=true;
    int n,q;scanf("%i%i",&n,&q);
    for(int i=1;i<=n;i++) par[i]=i;
    for(int i=1;i<=n;i++) dp[i][i]=1;
    while(q--){
        int type;scanf("%i",&type);
        if(type==1){
            int u,v;char c;scanf("%i%i",&u,&v);cin>>c;
            if(c!='a') subtask1=false;
            int C=c-'a'+1;
            E[u].pb({v,C}),E[v].pb({u,C});
            US(u,v);
            //if(subtask1) continue;
            dp[u][v]=dp[v][u]=1;
            for(int i=1;i<=n;i++){
                if(dp[v][i]==0) continue;
                for(auto j:E[i]) if(j.se==C) dp[u][j.fi]=dp[j.fi][u]=1;
            }
            //while(st.size()) {dp[u][*st.begin()]=dp[*st.begin()][u]=1;st.erase(*st.begin());}
            for(int i=1;i<=n;i++){
                if(dp[u][i]==0) continue;
                for(auto j:E[i]) if(j.se==C) dp[v][j.fi]=dp[j.fi][v]=1;
            }
            //while(st.size()) {dp[v][*st.begin()]=dp[*st.begin()][v]=1;st.erase(*st.begin());}
        }
        else{
            int u,v;scanf("%i%i",&u,&v);
            if(FS(u)!=FS(v)) {printf("0\n");continue;}
            if(subtask1) {printf("%i\n",FS(u)==FS(v));continue;}
            //for(int i=1;i<=n;i++) {for(int j=1;j<=n;j++) printf("%i ",dp[i][j]);printf("\n");}
            printf("%i\n",dp[u][v]);
            /*for(int i=0;i<N;i++) for(int j=0;j<N;j++) was[i][j]=false;
            DFS(u,v,0,0);
            printf("%i\n",res);
            res=false;*/
        }
    }
    return 0;
}