from random import randrange as R from random import shuffle def inp(): return int(input()) return R(1, 3) def query0(s): if I[s] == 0: return 1 else: return 2 def query1(l, r): if I[l] < I[r]: return 3 else: return 2 n = int(input()) I = [i for i in range(n)] shuffle(I) cnt = 0 for i in range(n): print("?", *[1 if i == j else 0 for j in range(n)], flush = True) cnt += 1 x = inp() #x = query0(i) if x == 1: p0 = i break from sys import setrecursionlimit as srl srl(10**6) X = [i for i in range(n) if i != p0] def main(l, r): if l == r: return [] if l+1 == r: return [X[l]] m = (l+r) >> 1 A0 = main(l, m)[::-1] A1 = main(m, r)[::-1] B = [] while A0 and A1: rep = [0] * n rep[A0[-1]] = 1 rep[A1[-1]] = 2 global cnt cnt += 1 print("?", *rep, flush = True) x = inp() #x = query1(A0[-1], A1[-1]) if x == 3: B.append(A0.pop()) else: B.append(A1.pop()) while A0: B.append(A0.pop()) while A1: B.append(A1.pop()) return B Ans = [p0] + main(0, n-1) Y = [0] * n for i in range(1, n+1): Y[Ans[i-1]] = i print("!", *Y) #print("Yes" if Y == [i+1 for i in I] else "No") #print(cnt) assert cnt <= 12000