#include <bits/stdc++.h>

using namespace std;

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

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;
    }
    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])++;
            dljp[pc][kc]=true;
            dljp[kc][pc]=true;
        }
        /*for(i=0;i<n;i++){
            for(j=0;j<n;j++){
                cout<<dljp[i][j]<<" ";
            }
            cout<<endl;
        }
        cout<<endl<<endl;*/
    }
    return 0;
}