#include <climits>
#include <deque>
#include <functional>
#include <iostream>
#include <iterator>
#include <set>
using namespace std;
#define int long long
signed main () {
    int N = 0;
    cin >> N;
    int free = 1;
    vector <int> ans (N + 1);
    vector <int> v;
    for (int i = 1; i <= N; i++) {
        cout << v.size() + 1 << ' ';
        for (int& e : v)
            cout << e << ' ';
        cout << i << '\n';
        cout.flush();
        int res = 0;
        cin >> res;
        if (res == v.size() + 1) {
            v.emplace_back (i);
            ans[i] = free++;
        } else if (res == v.size()) {
            int L = 0, R = v.size() - 1;
            int binans =0;
            while (L <= R) {
                int mid = (L + R) / 2;
                cout << mid + 1 + 1 << '\n';
                for (int j = 0; j <= mid; j++)
                    cout << v[j] << ' ';
                cout << i << '\n';
                cout.flush();
                int res1 = 0;
                cin >> res1;
                if (res1 == mid + 1 + 1) {
                    L = mid + 1;
                } else if (res1 == mid + 1) {
                    R = mid - 1;
                    binans = mid;
                }
            }
            ans[i] = ans[v[binans]];
        } else
            exit (1);
    }
    cout << 0 << ' ';
    for (int i = 1; i <= N; i++)
        cout << ans[i] << ' ';
    cout.flush();
}
| # | 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... |