//interactive mt19937 engine(1); set>z; ll@n; rep(4500){ vectorv(n); rep(i,n){ v[i]=i+1; } shuffle(v.begin(),v.end(),engine); ll b=min(n,32); ll a=b>>1; wtN("! ",a," ",b-a); rep(i,b){ wtN(" ",v[i]); } wt(""); ll@r; if(r<0){ exit(3); } if(!r){ rep(i,a){ rep(j,a,b){ z.insert({v[i],v[j]}); } } } } ll m=n*(n-1)/2-z.size(); wt("!",m); rep(i,n){ rep(j,i+1,n){ if(!z.count({i,j})){ wt(i,j); } } }