#include <bits/stdc++.h>
using std::cout;
using std::endl;
const long long maxn = 600 + 10;
inline long long Max(long long a, long long b) { return a > b ? a : b; }
inline long long Min(long long a, long long b) { return a > b ? b : a; }
inline long long read() {
  long long f = 1, r = 0;
  char c = getchar();
  while (!isdigit(c)) {
    if (c == '-') {
      f = -1;
    }
    c = getchar();
  }
  while (isdigit(c)) {
    r = 10 * r + c - '0';
    c = getchar();
  }
  return f * r;
}
inline void write(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) write(x / 10);
  putchar(x % 10 + '0');
}
inline void writesp(long long x) { write(x), putchar(' '); }
inline void writeln(long long x) { write(x), puts(""); }
long long N, fa[maxn], use[maxn];
struct Node {
  long long id, size;
  friend bool operator<(const Node& a, const Node& b) {
    return a.size < b.size;
  }
} nodes[maxn];
std::vector<long long> S, T;
inline long long query(long long u) {
  cout << S.size() << endl;
  for (auto i : S) cout << i << " ";
  cout << endl;
  cout << T.size() << endl;
  for (auto i : T) cout << i << " ";
  cout << endl;
  cout << u << endl;
  fflush(stdout);
  long long t;
  std::cin >> t;
  return t;
}
long long GetSize(long long x) {
  S.clear(), T.clear();
  S.push_back(1);
  for (register long long i = 2; i <= N; ++i) T.push_back(i);
  long long q = query(x);
  return q;
}
inline long long check(long long l, long long r, long long x) {
  S.clear(), T.clear(), S.push_back(1);
  for (register long long i = l; i <= r; ++i) {
    if (!use[nodes[i].id]) {
      T.push_back(nodes[i].id);
    }
  }
  if (T.size() == 0) {
    return 0;
  }
  long long q = query(nodes[x].id);
  return q >= 1;
}
void find(long long pos) {
  while (1) {
    long long l = 2, r = pos - 1, res = -1;
    while (l <= r) {
      long long mid = (l + r) >> 1;
      if (check(l, mid, pos)) {
        res = mid, r = mid - 1;
      } else {
        l = mid + 1;
      }
    }
    if (res == -1) break;
    fa[nodes[res].id] = nodes[pos].id, use[nodes[res].id] = 1;
  }
}
signed main() {
  N = read(), nodes[1].size = N, nodes[1].id = 1;
  for (register long long i = 2; i <= N; ++i) {
    nodes[i].size = GetSize(i), nodes[i].id = i;
  }
  std::sort(nodes + 2, nodes + 1 + N);
  for (register long long i = 2; i <= N; ++i) {
    find(i);
  }
  cout << "ANSWER\n";
  for (register long long i = 2; i <= N; ++i) {
    if (!fa[i]) fa[i] = 1;
    cout << i << " " << fa[i] << endl;
  }
  return 0;
}
