#include <iostream>
#define NMAX 100005

using namespace std;

int last[NMAX], first[NMAX], curr = 2, i, n, in, c = 0, level = 1, color[NMAX], fol = 1;
bool used[NMAX], quiz, q;

int main()
{
    cin >> n;

    for (i = 1; i <= n; ++ i)
        color[i] = i;

    last[level] = 1;
    first[level] = 1;

    while (curr <= n)
    {
        cout << 1 << " " << curr - 1 << " " << curr << '\n';
        cout.flush();

        cin >> quiz;

        if (quiz == 1)
        {
            last[level] = curr;
            color[curr] = color[last[level]];
        }
        else
        {
            bool found = 0;

            for (i = level - 1; i >= max(level - 3, 1) && !found; -- i)
            {
                cout << 1 << " " << last[i] << " " << curr << '\n';
                cout.flush();
                cin >> q;

                if (q == 1)
                {
                    last[level] = curr;
                    color[curr] = color[last[level]];
                    found = 1;
                }
            }

            if (!found)
            {
                level ++;
                last[level] = curr;
                first[level] = curr;
                color[curr] = color[last[level]];
            }
        }
        curr ++;
    }

    cout << 2 << " " << level << " ";

    for (i = 1; i <= level; ++ i)
        cout << first[i] << " " ;
    return 0;
}