#include <bits/stdc++.h>
using namespace std;
string obrni(string s){
    string novi;
    novi="";
    for(int i=s.size()-1;i>=0;i--){
        novi+=s[i];
    }
    return novi;
}
int ili(int a,int b){
    string bina="";
    string binb="";
    int ostataka,ostatakb;
    while(a>0){
        ostataka=a%2;
        bina+=(to_string(ostataka));
        a=a/2;
    }
    while(b>0){
        ostatakb=b%2;
        binb+=(to_string(ostatakb));
        b=b/2;
    }
    string rez="";
    for(int i=0;i<min(bina.size(),binb.size());i++){
        if(bina[i]=='1' || binb[i]=='1'){
            rez+='1';
        }
        else{
            rez+='0';
        }
    }
    if(bina.size()>binb.size()){
        for(int i=min(bina.size(),binb.size());i<bina.size();i++){
            if(bina[i]=='1'){
                rez+='1';
            }
            else{
                rez+='0';
            }
        }
    }
    if(binb.size()>bina.size()){
        for(int i=min(bina.size(),binb.size());i<binb.size();i++){
            if(binb[i]=='1'){
                rez+='1';
            }
            else{
                rez+='0';
            }
        }
    }
    int rezint=0;
    for(int i=0;i<rez.size();i++){
        if(rez[i]=='1'){
            rezint+=pow(2,i);
        }
    }
    return rezint;
}
int i(int a,int b){
    string bina="";
    string binb="";
    int ostataka,ostatakb;
    while(a>0){
        ostataka=a%2;
        bina+=(to_string(ostataka));
        a=a/2;
    }
    while(b>0){
        ostatakb=b%2;
        binb+=(to_string(ostatakb));
        b=b/2;
    }
    string rez="";
    for(int i=0;i<min(bina.size(),binb.size());i++){
        if(bina[i]=='1' && binb[i]=='1'){
            rez+='1';
        }
        else{
            rez+='0';
        }
    }
    int rezint=0;
    for(int i=0;i<rez.size();i++){
        if(rez[i]=='1'){
            rezint+=pow(2,i);
        }
    }
    return rezint;
}
bool dfs(int** matrica,int u,int v,int n){
    if(matrica[u][v]==1){
        return true;
    }
    for(int i=0;i<n;i++){
        if(matrica[u][i]==1){
            if(matrica[i][v]==1){
                return true;
            }
            for(int j=0;j<n;j++){
                if(matrica[i][j]==1){
                    if(matrica[j][v]==1){
                        return true;
                    }
                }
            }
        }
    }
    return false;

}
int** matrica;
int main(){
    int n,q,tip,u,v,c;
    cin >> n >> q;
    for(int i=0;i<q;i++){
        cin >> tip;
        if(tip==1){
            cin >> u >> v >> c;
            matrica[u][v]=1;
            matrica[v][u]=1;
        }
        if(tip==2){
            cin >> u >> v;
            if(dfs(matrica,u,v,n)){
                cout << 1 << endl;
            }
            else{
                cout << 0 << endl;
            }
        }
    }
}