#include<cstdio>
#include<bitset>
#include<vector>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<map>
#include<set>
#include<queue>
#include<algorithm>

using namespace std;

int N;
bool ap[100009];

int answer (int i, int j)
{
    printf ("1 %d %d\n", i, j);fflush (stdout);
    int ns;
    scanf ("%d",&ns);fflush(stdout);
    return ns;
}

void Finish (int l)
{
    printf ("2 %d", l);
    for (int i=1; i<=N; i++)
        if (ap[i] == 1)
            printf (" %d", i);
    printf ("\n"), fflush (stdout);
}

int main()
{
//freopen ("input", "r", stdin);
//freopen ("output", "w", stdout);

scanf ("%d", &N), fflush (stdout);
int cnt=0;
for (int i=1; i<=N; i++)
{
    int curr = i, j;
    for (j=0; ; j++)
    {
        if (i + (1 << j) > N) break;
        if (!answer (i, i + (1 << j))) break;
    }
    for (j = j - 1; j>=0; j--)
        if (answer (i, curr + (1 << j))) curr += (1 << j);
    ap[i]=1, cnt++;
    i = curr;
}
Finish (cnt);

return 0;
}