#include <cstdio> #include <algorithm> #include <vector> #include <set> using namespace std; int n, m; vector<int> sol; int ask(int x, int y) { printf("1 %d %d\n", x, y); fflush(stdout); int ans; scanf("%d", &ans); return ans; } int main() { scanf("%d", &n); int crb=1; while(crb<=n) { int pz=0; if(crb==n) { sol.push_back(crb); break; } while(ask(crb, crb+(1<<pz))==1) { ++pz; if(crb+(1<<pz)>n) break; } if(pz==0) { sol.push_back(crb); ++crb; continue; } --pz; int left=crb+(1<<pz)+1, right=min(n, crb+(1<<(pz+1))), med, sl=crb+(1<<pz); while(left<=right) { int med=(left+right)/2; if(ask(crb, med)==1) { sl=med; left=med+1; } else right=med-1; } sol.push_back(crb); crb=sl+1; } printf("2 %d ", sol.size()); for(int i=0; i<sol.size(); ++i) printf("%d ", sol[i]); printf("\n"); fflush(stdout); return 0; }