N = int(input()) g = [[] for _ in range(N + 1)] def que(x, y): print(1, x + 1, y + 1, flush=True) jud = int(input()) if jud == -1: return -1 return jud - 1 for i in range(N): x = que(i, i) if x == -1: x = N g[x].append(i) d = [-1 for _ in range(N + 1)] d[N] = 0 q = [N] while q: x = q.pop() for y in g[x]: if d[y] == -1: d[y] = d[x] + 1 q.append(y) x, x_max = -1, -1 for i in range(N): if d[i] > x_max: x_max = d[i] x = i g = [x for _ in range(N + 1)] for i in range(N): if i == x: continue y = que(x, i) if y == -1: y = N assert g[y] == x g[y] = i now = N ans = [-1 for _ in range(N)] for i in range(N): now = g[now] ans[now] = N - i print("2", " ".join(map(str, ans)))