#include <bits/stdc++.h>
#define FOREACH(it,c) for( __typeof((c).begin()) it=(c).begin();it!=(c).end();it++)
#define FOR(a,b,c) for(int a=(b);a<=(c);++a)
#define ROF(a,b,c) for(int a=(b);a>=(c);--a)
#define dbg(x) cout<<#x<<" = "<<(x)<<"\n";
#define pii pair<int,int>
#define pil pair< pair< int, int> , ind >
#define mp make_pair
#define pb push_back
#define fi first.first
#define se first.second
#define ind second
#define ll long long
#define TATA NULL
using namespace std;
const int NMAX = 100002;
vector < int > sol;
int main(){
    #ifndef ONLINE_JUDGE
        freopen("data.in","r",stdin);
    #endif // ONLINE_JUDGE
    cin.sync_with_stdio(false);
    cin.tie(TATA);
    bool ans;
    int n,start ;
    cin  >> n;
    for(int i=1;i<=n;)
    {
        start = i;
        sol.push_back(start);
        if(start == n)
            break;
        int len = 0;
        for(int j=1;j<17;j++)
        {
            len += 1<<j;
            if(start+len-1 <= n){
                cout<<1<<" "<<start<<" "<<start+len-1<<"\n";
                cout.flush();
                cin >>ans;
                if(ans == 0)
                {
                    if(j==1)
                    {
                        i = start + len;
                        break;
                    }
                    else{
                        len += 1 << (j-1);
                        j = 0;
                    }
                }
                else
                    len -= 1<<j;
            }
            else
            {
                if(j==1)
                {
                    cout<<2<<" "<<sol.size()<<" ";
                    for(int i=0;i<sol.size();i++)
                        cout<<sol[i]<<" ";
                    cout.flush();
                    return 0;
                }
                else
                {
                    len -= 1<<j;
                    len += 1<<(j-1);
                    j = 0;
                }
            }
        }
    }
    cout<<2<<" "<<sol.size()<<" ";
    for(int i=0;i<sol.size();i++)
        cout<<sol[i]<<" ";
    cout.flush();
    return 0;
}