#include using namespace std; int query(int x, int y) { cout << "? " << x << ' ' << y << endl; int z; cin >> z; return z; } int main() { int n, k; cin >> n >> k; vector h; for (int i = 1; i <= n; ++i) { h.push_back(i); // percolate up for (int j = h.size()-1; j > 0; ) { int pj = (j-1)/2; if (query(h[j], h[pj]) == h[j]) break; swap(h[j], h[pj]); j = pj; } if (h.size() <= k) continue; // percolate down h[0] = h.back(); h.pop_back(); for (int j = 0; ; ) { int lj = 2*j+1, rj = 2*j+2; if (lj >= h.size()) break; else if (rj == h.size()) { if (query(h[j], h[lj]) == h[lj]) break; swap(h[j], h[lj]); } else { int mj = (query(h[lj], h[rj]) == h[rj] ? lj : rj); if (query(h[j], h[mj]) == h[mj]) break; swap(h[j], h[mj]); j = mj; } } } cout << '!'; for (int x : h) cout << ' ' << x; cout << endl; }