#include<bits/stdc++.h>

using namespace std;

#define MAXV 1005

vector<pair<int, char> > g[MAXV];
bool pos[MAXV];
bool ispal = true, kraj = false;

bool palindrom(string pal){
    int i, n = pal.size();
    for(i=0;i<n/2;i++){
        if(pal[i] != pal[n-i-1]){
            return false;
        }
    }
    return true;
}

void dfs(int u, int v, int pred, string pal){
    if(kraj){
        return;
    }
    if(pred != -1){
        pal += g[u][pred].second;
    }
    if(u == v){
        ispal = palindrom(pal);
        kraj = true;
        return;
    }
    pos[u] = true;
    for(auto x : g[u]){
        if(!pos[x.first]){
            dfs(x.first, v, u, pal+to_string(x.second));
        }
    }
}

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int n, q;
    cin >> n >> q;
    while(q--){
        int t, u, v;
        char c;
        cin >> t;
        if(t == 1){
            cin >> u >> v >> c;
            g[u].push_back({v, c});
            g[v].push_back({u, c});
        }
        else{
            cin >> u >> v;
            /*for(int i=0;i<MAXV;i++){
                pos[i] = false;
            }
            ispal = true;
            dfs(u, v, -1, "");*/
            cout << 1 << "\n";
        }
    }
    return 0;
}