#include <bits/stdc++.h>

using namespace std;

#define MAXN 1010

long long n,q;
vector<pair<pair<long long,long long>,char> > upiti;
long long parent[MAXN];
long long siz[MAXN];

long long get(long long node)
{
    if (parent[node]==node) return node;
    else return get(parent[node]);
}

void unite(long long node1,long long node2)
{
    node1=get(node1),node2=get(node2);
    if (node1!=node2)
    {
        if (siz[node1]<siz[node2]) swap(node1,node2);
        parent[node2]=node1;siz[node1]+=siz[node2];
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>n>>q;
    for (long long i=1;i<=n;i++) parent[i]=i;
    for (long long i=1;i<=n;i++) siz[i]=1;
    long long bra=0;
    for (long long i=1;i<=q;i++)
    {
        long long t;cin>>t;
        if (t==1)
        {
            long long a,b;cin>>a>>b;
            char c;cin>>c;
            upiti.push_back({{a,b},c});
            if (c=='a') bra++;
        }
        if (t==2)
        {
            long long a,b;cin>>a>>b;bra++;
            upiti.push_back({{a,b},' '});
        }
    }
    if (bra==q)
    {
        ///1.subtask
        for (long long i=0;i<q;i++)
        {
            long long a=upiti[i].first.first;
            long long b=upiti[i].first.second;
            char c=upiti[i].second;
            if (c!=' ') {unite(a,b);continue;}
            a=get(a);b=get(b);
            if (a==b) cout<<1<<endl;
            else cout<<0<<endl;
        }
    }
}