#!/usr/bin/python3
import sys

def query(i, j):
    print("?", i, j, flush=True)
    r = [int(i) for i in input().split()]
    return r

def triple(x, y, z, cx, cy):
    s = cx + cy
    while cx != cy:
        y, z = z, y
        cx, cy = query(x, y)
    return z, cx 

n = int(input())
pi = 0
px, py = -1, -1
ans = []

while len(ans) < n-2:
    if pi <= len(ans):
        pi = len(ans)+1
        px, py = query(len(ans)+1, len(ans)+2)
    if px == py:
        ans += [px, py]
        continue
    nxt = query(len(ans)+2, len(ans)+3)
    if px not in nxt:
        ans.append(px)
    elif py not in nxt:
        ans.append(py)
    else:
        if px in ans:
            ans.append(py)
        elif py in ans:
            ans.append(px)
        else:
            z, v = triple(len(ans)+2, len(ans)+3, len(ans)+1, px, py)
            ans += [v]*3
            ans[z-1] = px + py - v 
    pi += 1
    px, py = nxt

if len(ans) == n-2:
    if pi < n-1:
        pi = n-1
        px, py = query(n-1, n)
    if px == py:
        ans += [px, py]
    else:
        z, v = triple(n-1, n, ans.index(px)+1, px, py)
        ans += [v]*2
        ans[z-1] = px + py - v
elif len(ans) == n-1:
    counter = [0]*n
    for i in ans:
        counter[i] += 1
    for i in range(n):
        if counter[i] == 1:
            ans.append(i)
print("!",*ans,flush=True)

