#include <bits/stdc++.h>

using namespace std;

int n;
char adj[1002][1002];
int dsu[1002],par[1002];
int rod(int a)
{
    if(par[a]==par[par[a]]) return a;
    return par[a]=rod(a);
}
void spoj(int a,int b)
{
    a=rod(par[a]);
    b=rod(par[b]);
    if(a==b) return;
    if(dsu[a]>dsu[b]) swap(a,b);
    dsu[b]+=dsu[a];
    dsu[a]=dsu[b];
    par[a]=b;
}
string pal(int a,int b)
{
    string s="";
    while(b!=a)
    {
        s+=adj[b][b-1];
        b-=1;
    }
    return s;
}
bool prov(int a,int b)
{
    string s=pal(a,b);
    int d=s.size();
    for(int i=0;i<=d/2;i++)
    {
        if(s[i]!=s[d-i-1]) return false;
    }
    return true;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int n,q;
    cin>>n>>q;
    for(int i=1;i<=n;i++)
    {
        par[i]=i;
        dsu[i]=1;
    }
    while(q--)
    {
        bool prvi=true,drugi=true;
        int t,a,b;
        char c;
        cin>>t>>a>>b;
        if(a>b) swap(a,b);
        if(t==1)
        {
            cin>>c;
            if(c!='a') prvi=false;
            if(b!=a+1) drugi=false;
            adj[a][b]=c;
            adj[b][a]=c;
            spoj(a,b);
        }
        else
        {
            if(prvi)
            {
                if(rod(a)==rod(b)) cout<<"1"<<endl;
                else cout<<"0"<<endl;
            }
            else if(drugi)
            {
                if((prov(a,b) || (adj[a][b]<=122 && adj[a][b]>=97)) && rod(a)==rod(b) ) cout<<"1"<<endl;
                else cout<<"0"<<endl;
            }
        }
    }
    return 0;
}