#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;
void DFS(int u,int v,int parent1,int parent2){
    //printf("%i %i %i %i\n",u,v,parent1,parent2);
    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 && !(i.fi==parent1 && j.fi==parent2)) DFS(i.fi,j.fi,u,v);
        }
    }
}
int main()
{
    int n,q;scanf("%i%i",&n,&q);
    for(int i=1;i<=n;i++) par[i]=i;
    while(q--){
        int type;scanf("%i",&type);
        if(type==1){
            int u,v;char c;scanf("%i%i",&u,&v);cin>>c;
            int C=c-'a'+1;
            E[u].pb({v,C}),E[v].pb({u,C});
            US(u,v);
        }
        else{
            int u,v;scanf("%i%i",&u,&v);
            if(FS(u)!=FS(v)) {printf("0\n");continue;}//printf("%i\n",FS(u)==FS(v));
            DFS(u,v,0,0);
            if(res) printf("1\n");
            else printf("0\n");
            res=false;
        }
    }
    return 0;
}