#include <bits/stdc++.h>
using namespace std;
int n;
bool bz[505];
int q[505];
int Query(int q[], int v) {
  int cnt[3] = {0, 0, 0};
  for (int i = 1; i <= n; ++i) cnt[q[i]]++;
  printf("%d\n", cnt[1]);
  for (int i = 1; i <= n; ++i)
    if (q[i] == 1) printf("%d ", i);
  printf("\n%d\n", cnt[2]);
  for (int i = 1; i <= n; ++i)
    if (q[i] == 2) printf("%d ", i);
  printf("\n%d\n", v);
  fflush(stdout);
  int t;
  scanf("%d", &t);
  return t;
}
int cnt;
pair<int, int> ans[505];
void Answer() {
  printf("ANSWER\n");
  for (int i = 1; i < n; ++i) printf("%d %d\n", ans[i].first, ans[i].second);
  fflush(stdout);
}
int sz[505];
int p[505];
bool cmpp(int x, int y) { return sz[x] < sz[y]; }
bool rt[505];
int ls[505];
int query(int l, int r, int x) {
  for (int i = l; i <= r; ++i) q[ls[i]] = 2;
  int t = Query(q, x);
  for (int i = l; i <= r; ++i) q[ls[i]] = 0;
  return t;
}
void find(int l, int r, int x, int s) {
  if (l == r) {
    ans[++cnt] = {x, ls[l]};
    rt[ls[l]] = 0;
    return;
  }
  int mid = l + r >> 1, t = query(l, mid, x);
  if (t) find(l, mid, x, t);
  if (s - t) find(mid + 1, r, x, s - t);
}
int main() {
  scanf("%d", &n);
  q[1] = 1;
  for (int i = 2; i <= n; ++i) q[i] = 2;
  for (int i = 2; i <= n; ++i) {
    sz[i] = Query(q, i);
    p[i - 1] = i;
  }
  for (int i = 2; i <= n; ++i) q[i] = 0;
  sort(p + 1, p + n, cmpp);
  for (int i = 1; i < n; ++i) {
    int x = p[i], k = 0;
    for (int j = 1; j <= n; ++j)
      if (rt[j] && sz[j] < sz[x]) ls[++k] = j;
    if (k) {
      int t = query(1, k, x);
      find(1, k, x, t);
    }
    rt[x] = 1;
  }
  for (int i = 2; i <= n; ++i)
    if (rt[i]) ans[++cnt] = {1, i};
  Answer();
  return 0;
}
