#include <bits/stdc++.h>
using namespace std;
int n,q,t,u,v;
char c;
bool posecen[1005],uspeh;
struct cvor{
    int index;
    char c;
}temp;
vector<cvor>graf[1005];
void dfs(int x, int y){
    //cout << x << "\n";
    for(int i=0; i<graf[x].size(); i++){
        if(graf[x][i].index==y){
            uspeh=true;
            return;
        }
        if(!posecen[graf[x][i].index]){
            posecen[graf[x][i].index]=true;
            dfs(graf[x][i].index,y);
        }
    }
    return;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> n >> q;
    while(q--){
        cin >> t;
        if(t==1){
            cin >> u >> v >> c;
            temp.c=c;
            temp.index=v;
            graf[u].push_back(temp);
            temp.index=u;
            graf[v].push_back(temp);
        }
        else{
            cin >> u >> v;
            memset(posecen,0,sizeof(posecen));
            posecen[u]=true;
            uspeh=true;
            dfs(u,v);
            if(uspeh)
                cout << "1\n";
            else
                cout << "0\n";
        }
    }

    return 0;
}
//neofarban cvor ne sme imati samo sa jedne strane obojenog suseda