/* */ //#pragma comment(linker, "/STACK:16777216") #define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define y0 sdkfaslhagaklsldk #define y1 aasdfasdfasdf #define yn askfhwqriuperikldjk #define j1 assdgsdgasghsf #define tm sdfjahlfasfh #define lr asgasgash #define norm asdfasdgasdgsd #define eps 1e-9 #define M_PI 3.141592653589793 #define bs 1000000007 #define bsize 512 const int SZ = 10000; using namespace std; vector ans; int start, n; int get(int l, int r) { cout << 1 << " " << l << " " << r << endl; int val; cin >> val; return val; } int main(){ //freopen("route.in","r",stdin); //freopen("route.out","w",stdout); //freopen("F:/in.txt", "r", stdin); //freopen("F:/output.txt", "w", stdout); ios_base::sync_with_stdio(0); //cin.tie(0); cin >> n; start = 1; while (start <= n) { ans.push_back(start); int span = 1; while (true) { if (start + span > n) break; int val = get(start, start + span); if (val == 0) break; span *= 2; } int l, r; l = start+span/2; r = start+span; if (l > n) l = n; if (r > n) r = n; while (l < r) { int mid = l + r + 1; mid /= 2; if (get(start, mid)) l = mid; else r = mid - 1; } start = l + 1; } cout << 2; cout << " " << ans.size(); for (int i = 0; i < ans.size(); i++) { cout << " " << ans[i]; } cout << endl; cin.get(); cin.get(); return 0; }