def question(s, l, r): if (s, l, r) in memo: return memo[(s, l, r)] print("?", 1, r-l+1, s+1, *list(range(l+1, r+2))) memo[(s, l, r)] = int(input()) return memo[(s, l, r)] def answer(edge): print("!", len(edge)) for u, v in edge: print(u+1, v+1) N = int(input()) memo = dict() edge = [] for i in range(N-1): res = question(i, i+1, N-1) if res == 0: continue l = i+1 while l < N: res = question(i, l, N-1) if res == 0: break left = l-1 right = N-1 while left+1 < right: mid = (left+right)//2 if question(i, l, mid) == 0: left = mid else: right = mid edge.append((i, right)) l = right+1 answer(edge)