/// Ovo mora da da WA na subtask 2, inace vazi teorema o srpskim takmicenjima...
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=1005;
int N,Q,rod[maxn],vel[maxn];
char sta[maxn];
int getpar(int x){
   if(rod[x]==x)
      return x;
   rod[x]=getpar(rod[x]);
   return rod[x];
}
void spoj(int a,int b){
   a=getpar(a);
   b=getpar(b);
   if(a==b)
      return;
   if(vel[a]>vel[b])
      rod[b]=a;
   else{
      vel[b]=max(vel[a]+1,vel[b]);
      rod[a]=b;
   }
}
void solve(){
   bool case2=true;
   cin>>N>>Q;
   for(int i=1;i<=N;i++){
      rod[i]=i;
      vel[i]=1;
   }
   while(Q--){
      int t,a,b;
      char c;
      cin>>t>>a>>b;
      if(t==1){
         cin>>c;
         if(c!='a' or a+1!=b)
            exit(-1);
         if(a+1!=b)
            case2=false;
         sta[a]=c;
         spoj(a,b);
      }
      else{
         if(getpar(a)!=getpar(b)){
            cout<<"0\n";
            continue;
         }
         if(!case2){
            cout<<"1\n";
            continue;
         }
         b--;
         int ok=1;
         for(int i=0;a+i<b-i;i++)
            if(sta[a+i]!=sta[b-i]){
               ok=0;
               break;
            }
         cout<<ok<<"\n";
      }
   }
}
/*
3 5
2 1 2
1 1 2 a
2 1 2
1 2 3 a
2 1 3
*/
void reset(){}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int T=1;
    //cin>>T;
    while(T--){
        solve();
        reset();
    }
    return 0;
}