from typing import List, Tuple, Optional from collections import deque import sys import itertools import heapq import bisect import math from collections import deque, defaultdict from functools import lru_cache, cmp_to_key input = sys.stdin.readline if __file__ != 'prog.py': sys.setrecursionlimit(10 ** 6) def readints(): return map(int, input().split()) def readlist(): return list(readints()) def readstr(): return input()[:-1] def query(l, r): print(f'? {l} {r}', flush=True) S = int(input()) return S N = int(input()) S = [query(i, i + 1) for i in range(1, N)] for i in range(1, N + 1): used = {i} ans = [i] prev = i ok = True for s in S: nxt = s - prev if nxt < 1 or N < nxt or nxt in used: ok = False break ans.append(nxt) used.add(nxt) prev = nxt else: print(f"! {' '.join([str(n) for n in ans])}") exit()