#include <bits/stdc++.h>

using namespace std;

bool dljp[1010][1010];
vector <int> veze[1010];
vector <char> slova[1010];
int dveze[1010];
bool obidjen[1010];

void pretrazi_iz_sredine(int pc,int kc){
    dljp[pc][kc]=true;
    dljp[kc][pc]=true;
    int i,j;
    for(i=0;i<dveze[pc];i++){
        for(j=0;j<dveze[kc];j++){
            if(slova[pc][i]==slova[kc][j] && !dljp[veze[pc][i]][veze[kc][j]]){
                pretrazi_iz_sredine(veze[pc][i],veze[kc][j]);
            }
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n,q;
    cin>>n;
    int i,j;
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            dljp[i][j]=false;
        }
        dveze[i]=0;
        obidjen[i]=false;
    }
    for(i=0;i<n;i++){
        dljp[i][i]=true;
    }
    cin>>q;
    int k;
    int s;
    int pc,kc;
    char c;
    for(k=0;k<q;k++){
        cin>>s;
        if(s==2){
            cin>>pc>>kc;
            pc--;
            kc--;
            if(dljp[pc][kc]){
                cout<<"1"<<endl;
            }
            else{
                cout<<"0"<<endl;
            }
        }
        else{
            cin>>pc>>kc>>c;
            pc--;
            kc--;
            for(i=0;i<n;i++){
                if(i!=pc && i!=kc){
                    for(j=0;j<dveze[i];j++){
                        if((slova[i][j])==c){
                            if(dljp[veze[i][j]][pc]){
                                dljp[i][kc]=true;
                                dljp[kc][i]=true;
                            }
                            if(dljp[veze[i][j]][kc]){
                                dljp[i][pc]=true;
                                dljp[pc][i]=true;
                            }
                        }
                    }
                }
            }
            veze[pc].push_back(kc);
            slova[pc].push_back(c);
            veze[kc].push_back(pc);
            slova[kc].push_back(c);
            (dveze[pc])++;
            (dveze[kc])++;
            pretrazi_iz_sredine(pc,kc);
        }
        /*for(i=0;i<n;i++){
            for(j=0;j<n;j++){
                cout<<dljp[i][j]<<" ";
            }
            cout<<endl;
        }
        cout<<endl<<endl;*/
    }
    return 0;
}
/*8
20
1 1 2 a
1 2 4 a
2 1 4
1
1 2 3 a
1 2 5 b
2 5 3
0
2 5 8
0
1 3 8 c
1 5 7 a
1 6 7 c
2 6 8
1
2 7 3
1
2 7 2
0
2 2 5
1
1 2 7 c
2 8 7
1
2 5 4
0*/