#include <bits/stdc++.h>

using namespace std;
int N,Q;
int tip,u,v;
bool zadatak_1=true;
vector<bool>posecen;
string c;
vector<vector<pair<int,string>>>graf;
void resiPrvi(){
    stack<int>s;
    posecen.clear();
    posecen.resize(N+7);
    fill(posecen.begin(),posecen.end(),false);
    s.push(u);
    int tren;
    while(s.empty()==false){
        tren=s.top();
        s.pop();
        if(tren==v){
            cout<<1<<"\n";
            return;
        }
        if(posecen[tren]){
            continue;
        }
        posecen[tren]=true;
        for(auto i:graf[tren]){
            s.push(i.first);
        }
    }
    cout<<0<<"\n";
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin>>N>>Q;
    graf.resize(N+7);
    for(int i=0;i<Q;i++){
        cin>>tip;
        if(tip==1){
            cin>>u>>v>>c;
            if(c!="a"){
                zadatak_1=false;
            }
            graf[u].push_back(make_pair(v,c));
            graf[v].push_back(make_pair(u,c));
        }
        if(tip==2){
            cin>>u>>v;
            if(zadatak_1){
                resiPrvi();
            }
        }
    }
    return 0;
}