これを奇遇転置と呼ぶのはeditorialを見て知った。

solution

奇偶転置ソートをする。 $0, 1, \dots, n-1$から始めて、隣接する$2$項をまとめて$\frac{N}{2}$個比較してswapを$N$回繰り返す。

implementation

#!/usr/bin/env python3
import sys
QUERY_LIMIT = 2000
n = int(input())
a = list(range(1,n+1))
for i in range(QUERY_LIMIT):
    q = []
    j = i % 2
    while j+1 < n:
        q += [a[j], a[j+1]]
        j += 2
    while len(q)//2 < n:
        q += [0, 0]
    print('?', *q)
    sys.stdout.flush()
    q = input().split()
    j = i % 2
    modified = False
    while j+1 < n:
        if q[j//2] == '>':
            a[j], a[j+1] = a[j+1], a[j]
            modified = True
        j += 2
    if not modified:
        break
print('!', *a)