#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;

bool dobar(string s){
    vector<pair<char,int>> tmp;
    int i=0;
    while(i < s.size()){
        int k=1;
        while(s[++i]==s[i-1])k++;
        tmp.emplace_back(s[i-1],k);
    }
    i=0; int j=tmp.size()-1;
    while(i<j){
        if(!(tmp[i].first == tmp[j].first &&
             (tmp[i].second - tmp[j].second)%2 == 0
             ))return false;
        i++; j--;
    }
    return true;
}

int main(){
    cin.tie(0);
    ios_base::sync_with_stdio(false);
    int n,q; cin >> n >> q;
    vector<vector<pair<int, char>>> adj(n);
    while(q--){
        int t; cin >> t;
        int u,v; cin >> u >> v;
        u--; v--;
        if(t==1){
            char c; cin >> c;
            adj[u].emplace_back(v,c);
            adj[v].emplace_back(u,c);
        }
        else {
            queue<int> q;
            vector<bool> vis(n,false);
            q.emplace(u);
            while(!q.empty()){
                int tr=q.front().first;
                q.pop();
                if(tr == v){
                    cout << 1 << '\n';
                    goto dun;
                }
                else{
                    for(auto par : adj[tr]){
                        if(!vis[par.first]){
                            vis[par.first]=true;
                            q.push(par.first);
                        }
                    }
                }
            }
            cout << 0 << '\n';
            dun:;
        }
    }
    return 0;
}