#include #define NMAX 100005 using namespace std; int last[NMAX], first[NMAX], curr = 2, i, n, in, c = 0, level = 1, color[NMAX], fol = 1; bool used[NMAX], quiz, q; int main() { cin >> n; for (i = 1; i <= n; ++ i) color[i] = i; last[level] = 1; first[level] = 1; while (curr <= n) { cout << 1 << " " << curr - 1 << " " << curr << '\n'; cout.flush(); cin >> quiz; if (quiz == 1) { last[level] = curr; color[curr] = color[last[level]]; } else { bool found = 0; for (i = level - 1; i >= max(level - 3, 1) && !found; -- i) { cout << 1 << " " << last[i] << " " << curr << '\n'; cout.flush(); cin >> q; if (q == 1) { last[level] = curr; color[curr] = color[last[level]]; found = 1; } } if (!found) { level ++; last[level] = curr; first[level] = curr; color[curr] = color[last[level]]; } } curr ++; } cout << 2 << " " << level << " "; for (i = 1; i <= level; ++ i) cout << first[i] << " " ; return 0; }