#include <iostream>
#include <string>
#include <vector>

using namespace std;

constexpr char NISU_POVEZANI = '\0';

int n;
// vector<bool> vis;
bool vis[1000];
// vector<vector<char>> graf;
char graf[1000][1000];
string str;
bool nadjen_palindrom = false;

void dfs_svi_a(int pc, int kc)
{
    if (pc == kc)
    {
        nadjen_palindrom = true;
        return;
    }

    if (nadjen_palindrom)
        return;

    vis[pc] = true;

    for (int i = 0; i < n; i++)
    {
        if (graf[pc][i] && !vis[i] && i != pc)
            dfs_svi_a(i, kc);
    }
}

void dfs(int tc, int kc, string put)
{
    if (tc == kc)
    {
        for (int i = 0, j = put.length() - 1; i < put.length(); i++, j--) {
            if (put[i] != put[j])
                return;
        }

        nadjen_palindrom = true;
        return;
    }

    if (nadjen_palindrom)
        return;

    vis[tc] = true;

    for (int i = 0; i < n; i++)
    {
        if (graf[tc][i] && !vis[i] && i != tc) {
            put.append(to_string(graf[tc][i]));
            dfs(i, kc, put);
        }
    }
}

int main()
{
    ios_base::sync_with_stdio(false);
    
    int q;
    cin >> n >> q;

    bool karakter_uvek_a = true;

    while (q--) {
        int tip_upita;
        cin >> tip_upita;

        switch (tip_upita)
        {
        case 1:
            int c1, c2;
            char karakter;
            cin >> c1 >> c2 >> karakter;

            c1--; c2--;

            if (karakter != 'a')
                karakter_uvek_a = false;

            graf[c1][c2] = karakter;
            graf[c2][c1] = karakter;

            break;
        case 2:
            int pc, kc;
            cin >> pc >> kc;

            pc--; kc--;

            for (int i = 0; i < n; i++)
                vis[i] = false;
                
            nadjen_palindrom = false;

            if (karakter_uvek_a)
            {
                dfs_svi_a(pc, kc);

                if (nadjen_palindrom)
                    str.append("1\n");
                else
                    str.append("0\n");
            }
            else
            {
                dfs(pc, kc, "");

                if (nadjen_palindrom)
                    str.append("1\n");
                else
                    str.append("0\n");       
            }

            break;
        default:
            break;
        }
    }

    cout << str;
}