#include <bits/stdc++.h>
#define pb push_back
#define fi first
#define se second
#define maxn 1010

using namespace std;
typedef long long ll;

int n,q,qtype,u,v,p[maxn], siz[maxn];
bool paln[maxn][maxn/2], palp[maxn][maxn/2];
char c, gr[maxn];
vector<int> res1;
vector<pair<int,int>> upit2;

void makeset(int v)
{
    p[v]=v;
    siz[v]=1;
}

int findset(int v)
{
    if(p[v]==v) return v;
    return p[v]=findset(p[v]);
}

void unionset(int a, int b)
{
    a=findset(a);
    b=findset(b);
    if(a!=b){
        if(siz[a]>siz[b]) swap(a,b);
        p[a]=b;
        siz[b]+=siz[a];
    }
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> q;
    for(int i=1; i<=n; i++){
        makeset(i);
    }
    bool sluc1=true;
    while(q--){
        cin >> qtype;
        if(qtype==1){
            cin >> u >> v >> c;
            unionset(u,v);
            gr[u]=c;
            if(c!='a') sluc1=false;
        }
        else{
            cin >> u >> v;
            if(findset(u)==findset(v)) {
                res1.pb(1);
                upit2.pb({u,v});
            }
            else {
                res1.pb(0);
                upit2.pb({-1,-1});
            }

        }
    }
        if(sluc1){
            for(int i=0; i<res1.size(); i++) cout << res1[i] << "\n";
        }
        else{
            for(int i=0; i<=n; i++){
                paln[i][0]=true;
                palp[i][0]=true;
            }
            for(int i=1; i<=n; i++){
                for(int j=1; j<=n; j++){
                    if(j>=i || j>=n-i+1) break;
                    if(gr[i-j]==gr[i+j-1]) paln[i][j]=true;
                    else break;
                }
            }
            for(int i=1; i<=n; i++){
                for(int j=1; j<=n; j++){
                    if(j>=i || j>=n-i) break;
                    if(gr[i-j]==gr[i+j]) palp[i][j]=true;
                    else break;
                }
            }
            for(auto k:upit2){
                int u=k.fi;
                int v=k.se;
                if(u>v) swap(u,v);
                if(u==-1 && v==-1) cout << 0 << "\n";
                else{
                    if((v-u)%2==0) cout << paln[(u+v)/2][(v-u)/2] << "\n";
                    else cout << palp[(u+v)/2][(v-u)/2] << "\n";
                }
            }
        }

}