#include <bits/stdc++.h>
using namespace std;
int n;
set<pair<int, int> > s;
vector<int> od;
int p[512];
vector<int> v[512];
inline void dfs(int b, int pr = -1) {
  od.push_back(b);
  p[b] = pr;
  auto it = s.lower_bound(make_pair(b, -1));
  while (it != s.end() && (*it).first == b) {
    if (it->second == pr) {
      it = next(it);
      continue;
    }
    dfs(it->second, b);
    v[b].push_back(it->second);
    v[it->second].push_back(b);
    it = next(it);
  }
}
bool us[512];
void init() {
  for (int i = 0; i <= n; i++) {
    v[i].clear();
    us[i] = false;
  }
}
int sz[512];
inline pair<int, int> cent(int b, int ALL, int pr) {
  sz[b] = 1;
  pair<int, int> ret = make_pair(INT_MAX, -1);
  int mx = -1;
  for (int go : v[b]) {
    if (us[go]) continue;
    if (go == pr) continue;
    ret = min(ret, cent(go, ALL, b));
    sz[b] += sz[go];
    mx = max(mx, sz[go]);
  }
  mx = max(mx, ALL - sz[b]);
  ret = min(ret, make_pair(mx, b));
  return ret;
}
inline void er(int a, int b) {
  s.erase(make_pair(a, b));
  s.erase(make_pair(b, a));
}
inline void ins(int a, int b) {
  s.insert(make_pair(a, b));
  s.insert(make_pair(b, a));
}
bool ok(vector<int> &vv, int num, int root, int root2) {
  cout << 1 << endl;
  cout << root << endl;
  cout << num + 1 << endl;
  for (int j = 0; j <= num; j++) {
    if (j) printf(" ");
    printf("%d", vv[j]);
  }
  puts("");
  cout << root2 << endl;
  fflush(stdout);
  int way;
  scanf("%d", &way);
  if (way == num + 1) {
    return true;
  }
  return false;
}
inline void df(int b, int add) {
  cent(b, 0, -1);
  b = cent(b, sz[b], -1).second;
  vector<int> z;
  for (int go : v[b]) {
    z.push_back(go);
  }
  us[b] = true;
  int mint = 0;
  int maxt = z.size();
  if (z.size() && ok(z, 0, add, b) == false) {
    maxt = mint;
  }
  while (mint + 1 < maxt) {
    int mid = (mint + maxt) / 2;
    if (ok(z, mid, add, b)) {
      mint = mid;
    } else {
      maxt = mid;
    }
  }
  if (maxt == z.size()) {
    ins(b, add);
    return;
  }
  if (us[z[maxt]] == false) {
    df(z[maxt], add);
    return;
  }
  er(z[maxt], b);
  ins(z[maxt], add);
  ins(add, b);
}
int zz[512];
vector<int> o;
bool cmp(int a, int b) { return zz[a] > zz[b]; }
int main() {
  cin >> n;
  zz[1] = n;
  for (int i = 2; i <= n; i++) {
    cout << 1 << endl;
    cout << 1 << endl;
    cout << n - 1 << endl;
    for (int j = 2; j <= n; j++) {
      if (j > 1) printf(" ");
      printf("%d", j);
    }
    puts("");
    printf("%d\n", i);
    fflush(stdout);
    int a;
    scanf("%d", &a);
    zz[i] = a;
  }
  for (int i = 2; i <= n; i++) o.push_back(i);
  sort(o.begin(), o.end(), cmp);
  for (int i : o) {
    od.clear();
    init();
    dfs(1);
    reverse(od.begin(), od.end());
    df(1, i);
  }
  puts("ANSWER");
  for (auto it : s) {
    if (it.first > it.second) continue;
    printf("%d %d\n", it.first, it.second);
  }
  return 0;
}
