#include using namespace std::literals::string_literals; using i64 = std::int_fast64_t; using std::cout; using std::cerr; using std::endl; using std::cin; template std::vector make_v(size_t a){return std::vector(a);} template auto make_v(size_t a,Ts... ts){ return std::vector(ts...))>(a,make_v(ts...)); } bool query(std::vector & q) { printf("? %d\n", q.size()); for(int i = 0; i < q.size(); i++) printf("%d%c", q[i], " \n"[i == (int)q.size() - 1]); cout << std::flush; int ret; scanf("%d", &ret); return (ret == 1); } int main() { int n; scanf("%d", &n); std::vector ans; for(int i = 0; i < n; i++) { std::vector q; for(int j = 0; j < i; j++) q.push_back(j + 1); for(int j = i + 1; j < n; j++) q.push_back(j + 1); if(!query(q)) ans.push_back(i + 1); } printf("! %d\n", ans.size()); for(int i = 0; i < ans.size(); i++) printf("%d%c", ans[i], " \n"[i == (int)ans.size() - 1]); cout << std::flush; return 0; }