#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int n; cin >> n;
    vector<int> j = {0};
    for(int i = 0; i < n-1; i++){
        cout << 2 << " " << i+1 << " " << i+2 << endl;
        int j1; cin >> j1;
        if(j1 == 2){
            j.push_back(i+1);
        }
    }
    vector<int> nxt1(n+1, -2);
    vector<int> nxt(n+1, -1);
    for(int i = 0; i < j.size(); i++){
        int low = 0;
        int top = i-1;
        int ns = -1;
        while(low <= top){
            int mid = (low + top)/2;
            cout << i-mid+1 << " " << j[i]+1 << " ";
            int co = 1;
            for(int y = i-1; y >= mid; y--){
                cout << j[y]+1 << " ";
                if(nxt[y] < mid){
                    co++;
                }
            }cout << endl;
            int h; cin >> h;
            if(h == co){
                top = mid-1;
            }else{
                ns = mid;
                low = mid+1;
            }
        }
        nxt[i] = ns;
        nxt1[j[i]] = ns;
    }
    cout << 0 << " ";
    int l = 0;
    int it = 1;
    vector<int> g(n+1);
    // for(int i = 0; i < n; i++){
    //     cout << nxt1[i] << " ";
    // }cout << "\n";
    for(int y = 0; y < n; y++){
        if(nxt1[y] == -2){
            cout << l << " ";
        }else if(nxt1[y] == -1){
            g[y] = it;
            cout << it << " ";
            l = it;
            it++;
        }else{
            cout << g[nxt1[y]] << " ";
            l = g[nxt1[y]];
        }
    }cout << endl;
    return 0;
}
//1 1 2 2 1
//1 2 3 4 3
//1 2 1 2 3
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |