import sys N = int(input()) def solve(N): dp = [0] * N for d in range(1, N): for shift in range(2): q = make_query(shift, d, N) if not q: continue query = '? ' + ' '.join(map(str, q)) print(query) sys.stdout.flush() reply = input() analyze(reply, q, dp) answer = get_answer(dp) print('! ' + ' '.join(map(str, answer))) sys.stdout.flush() def make_query(shift, d, N): used = [False] * N q = [] for idx in range(shift*d, N): if used[idx]: continue idx2 = idx + d if idx2 >= N: break q.extend([idx + 1, idx2 + 1]) used[idx] = True used[idx2] = True if not q: return q n_blank = 2 * N - len(q) q.extend([0] * n_blank) return q def analyze(reply, q, dp): idx = 0 for r in reply: left, right = q[idx], q[idx + 1] idx += 2 if left == 0: return if r == '>': dp[left - 1] += 1 if r == '<': dp[right - 1] += 1 def get_answer(dp): answer = [0] * N for i, w in enumerate(dp, 1): answer[w] = i return answer solve(N)