#include #define rep(i, n) for (int i = 0; i < (n); ++i) #define rep1(i, n) for (int i = 1; i <= (n); ++i) using namespace std; using ll = long long; template struct BIT { int n; vector d; BIT(int n=0):n(n),d(n+1) {} void add(int i, T x=1) { for (i++; i <= n; i += i&-i) { d[i] += x; } } T sum(int i) { T x = 0; for (i++; i; i -= i&-i) { x += d[i]; } return x; } T sum(int l, int r) { return sum(r-1) - sum(l-1); } int kth(ll k) { int b = 1, i = 0; while (b*2 <= n) b <<= 1; while (b) { if (i+b <= n and d[i+b] < k) { k -= d[i+b]; i += b; } b >>= 1; } return i; } }; int main() { int n; cin >> n; vector inv(n+1); rep1(i, n) { cout << "? " << 1 << " " << i << endl; ll x; cin >> x; inv[i] = x; } vector g(n+1); rep1(i, n) g[i] = inv[i]-inv[i-1]; BIT t(n); rep(i, n) t.add(i); vector p(n+1); for (int i = n; i >= 1; --i) { int ni = t.kth(i-g[i]); p[i] = ni+1; t.add(ni, -1); } cout << "! "; rep1(i, n) cout << p[i] << " "; cout << endl; return 0; }