//并查集的模板题,写个并查集完事
#include <bits/stdc++.h>


using namespace std;

map<string , string> mp;

string find(string s) {
    return mp[s]==s? s:mp[s] = find(mp[s]);
}

void merge(string s1, string s2) {
    string g1 = find(s1);
    string g2 = find(s2);
    if (g1!=g2) mp[g1] = g2;
}

int main() {
    int n, m, opt;
    string name;
    string p1, p2;
    cin>>n>>m;
    //先让初始的根节点为他自己。
    for (int i=0;i<n;i++) {
        cin>>name;
        mp[name] = name;
    }
    while (m--) {
        cin>>opt;
        cin>>p1>>p2;
        if (opt == 1) {
            merge(p1, p2);
        }
        if (opt==2) {
            if (find(p1)==find(p2)) cout<<1<<endl;
            else cout<<0<<endl;
        }
    }
    
    
    return 0;
}