#include <bits/stdc++.h>   using namespace std;   using ll = long long;   template <class t, class u>   void chmax(t& first, u second) {     if (first < second) first = second;   }   template <class t, class u>   void chmin(t& first, u second) {     if (second < first) first = second;   }   template <class t>   using vc = vector<t>;   template <class t>   using vvc = vc<vc<t>>;   using pi = pair<ll, ll>;   using vi = vc<ll>;   template <class t, class u>   ostream& operator<<(ostream& os, const pair<t, u>& p) {     return os <<  {  << p.first <<  ,  << p.second <<  } ;   }   template <class t>   ostream& operator<<(ostream& os, const vc<t>& v) {     os <<  { ;     for (auto e : v) os << e <<  , ;     return os <<  } ;   }   using uint = unsigned;   using ull = unsigned long long;   template <ll i, class T>   void print_tuple(ostream&, const T&) {}   template <ll i, class T, class H, class... Args>   void print_tuple(ostream& os, const T& t) {     if (i) os <<  , ;     os << get<i>(t);     print_tuple<i + 1, T, Args...>(os, t);   }   template <class... Args>   ostream& operator<<(ostream& os, const tuple<Args...>& t) {     os <<  { ;     print_tuple<0, tuple<Args...>, Args...>(os, t);     return os <<  } ;   }   void print(ll x, ll suc = 1) {     cout << x;     if (suc == 1) cout <<   n ;     if (suc == 2) cout <<    ;   }   ll read() {     ll i;     cin >> i;     return i;   }   vi readvi(ll n, ll off = 0) {     vi v(n);     for (ll i = ll(0); i < ll(n); i++) v[i] = read() + off;     return v;   }   template <class T>   void print(const vector<T>& v, ll suc = 1) {     for (ll i = ll(0); i < ll(v.size()); i++)       print(v[i], i == ll(v.size()) - 1 ? suc : 2);   }   string readString() {     string s;     cin >> s;     return s;   }   template <class T>   T sq(const T& t) {     return t * t;   }   void yes(bool ex = true) {     cout <<  Yes  << endl;     if (ex) exit(0);   }   void no(bool ex = true) {     cout <<  No  << endl;     if (ex) exit(0);   }   constexpr ll ten(ll n) { return n == 0 ? 1 : ten(n - 1) * 10; }   const ll infLL = LLONG_MAX / 3;   const ll inf = infLL;   ll topbit(signed t) { return t == 0 ? -1 : 31 - __builtin_clz(t); }   ll topbit(ll t) { return t == 0 ? -1 : 63 - __builtin_clzll(t); }   ll botbit(signed first) { return first == 0 ? 32 : __builtin_ctz(first); }   ll botbit(ll first) { return first == 0 ? 64 : __builtin_ctzll(first); }   ll popcount(signed t) { return __builtin_popcount(t); }   ll popcount(ll t) { return __builtin_popcountll(t); }   bool ispow2(ll i) { return i && (i & -i) == i; }   ll mask(ll i) { return (ll(1) << i) - 1; }   bool inc(ll first, ll second, ll c) { return first <= second && second <= c; }   template <class t>   void mkuni(vc<t>& v) {     sort(v.begin(), v.end());     v.erase(unique(v.begin(), v.end()), v.end());   }   ll rand_int(ll l, ll r) {     static random_device rd;     static mt19937_64 gen(rd());     return uniform_int_distribution<ll>(l, r)(gen);   }   void priv(vi s) {     cout << s.size();     for (auto i : s) cout <<     << i + 1;     cout << endl;   }   ll ask(vi s, vi t, ll v) {     static ll num = 0;     num++;     assert(num <= 11111);     priv(s);     priv(t);     cout << v + 1 << endl;     ll res;     cin >> res;     return res;   }   void answer(vc<pi> ans) {     cout <<  ANSWER  << endl;     for (auto e : ans) cout << e.first + 1 <<     << e.second + 1 << endl;   }   const ll nmax = 510;   vi t[nmax];   bool rem[nmax];   ll tsize(ll v, ll p) {     ll ret = 1;     for (auto to : t[v])       if (to != p && !rem[to]) ret += tsize(to, v);     return ret;   }   ll findc(ll v, ll p, ll s) {     ll ret = 1, mx = 0;     for (auto to : t[v])       if (to != p && !rem[to]) {         ll f = findc(to, v, s);         if (f <= 0)           return f;         else {           ret += f;           chmax(mx, f);         }       }     chmax(mx, s - ret);     if (mx * 2 <= s)       return -v;     else       return ret;   }   signed main() {     cin.tie(0);     ios::sync_with_stdio(0);     cout << fixed << setprecision(20);     ll n;     cin >> n;     vi sz(n);     for (ll i = ll(1); i < ll(n); i++) {       vi s{0};       vi tmp(n - 1);       iota(tmp.begin(), tmp.end(), 1);       sz[i] = ask(s, tmp, i);     }     vi idx(n - 1);     iota(idx.begin(), idx.end(), 1);     sort(idx.begin(), idx.end(), [&](ll i, ll j) { return sz[i] > sz[j]; });     vc<pi> ans;     for (auto i : idx) {       memset(rem, 0, sizeof(rem));       ll cur = 0;       while (1) {         cur = -findc(cur, -1, tsize(cur, -1));         vi vs;         for (auto to : t[cur])           if (!rem[to]) vs.push_back(to);         ll lw = 0, up = vs.size() + 1;         while (up - lw > 1) {           const ll m = (lw + up) / 2;           vi s(vs.begin(), vs.begin() + m);           if (ask(s, {i}, cur) < m)             up = m;           else             lw = m;         }         if (lw == (ll)vs.size()) break;         rem[cur] = true;         cur = vs[lw];       }       t[cur].push_back(i);       t[i].push_back(cur);       ans.emplace_back(cur, i);     }     answer(ans);   }