#include #define rep1(i, n) for (int i = 1; i <= (n); ++i) using namespace std; using ll = long long; using P = pair; int n; int ask(int v, vector& s) { if (!s.size()) return 0; cout << "? " << 1 << " " << s.size() << " " << v; for (int u : s) cout << " " << u; cout << endl; int r; cin >> r; return r; } vector

es; void f(int v, vector& s) { if (!s.size()) return; int res = ask(v, s); if (res == 0) return; if (s.size() == 1) { es.emplace_back(v, s[0]); return; } int m = s.size()/2; vector s1(s.begin(), s.begin()+m); vector s2(s.begin()+m, s.end()); f(v, s1); f(v, s2); } int main() { cin >> n; rep1(i, n) { vector cand; for (int j = i+1; j <= n; ++j) cand.push_back(j); f(i, cand); } cout << "! " << es.size() << endl; for (auto& [u, v] : es) cout << u << " " << v << endl; return 0; }