//3333333333333333
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
int main(){
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int n,q=1,kar=0,raz=INT_MIN;cin>>n>>q;
    vector<pair<int,char>> adj[n+1];
    set<int> pamti[n+1];
    while(q--){
        int b;cin>>b;
        if(b==1){//dodaj granu
            int u,v;char c;
            cin >> u >> v >> c;
            if(c!='a')kar++;
            //u--;v--;
            adj[u].push_back(make_pair(v,c));
            adj[v].push_back(make_pair(u,c));
            //ovde se generise pamti
            pamti[u].insert(int(c-'a'));
            pamti[v].insert(int(c-'a'));
            raz=max(raz,(v-u));
        }
        else{//proveri
            int u,v,broj=0;
            cin >> u >> v;
            //u--;v--;
            if(u>v)swap(u,v);
            if(raz==1){//proveri da li je povezan sa tim cvorom, prvi podzadatak
                int rez=0;
                auto prvi=adj[u][0];
                auto drugi=adj[v][0];
                while(u<=v){
                    if(prvi.second!=drugi.second){
                        rez++;
                    }
                    (u)++;
                    (v)--;
                }
                if(rez)cout<<0<<endl;
                else cout<<1<<endl;
                continue;
            }
            //cout<<broj;
        }
    }


    return 0;
}