#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef vector VI; typedef pair PII; #define REP(i,s,t) for(int i=(s);i<(t);i++) #define FILL(x,v) memset(x,v,sizeof(x)) int n; VI perm; void print() { REP(i,0,n-1) { cout << perm[i] << " "; } cout << perm[n - 1] << endl; cout.flush(); } int main() { cin >> n; perm = VI(n); REP(i,0,n) perm[i] = i + 1; print(); vector ok(n); int baseline; cin >> baseline; if (baseline == n) return 0; REP(i,0,n-1) { if (ok[i]) continue; VI pos(n); int maxi = i + 1, mini = i + 1; REP(j,i+1,n) { swap(perm[i], perm[j]); print(); cin >> pos[j]; if (pos[j] == n) return 0; pos[j] -= baseline; swap(perm[i], perm[j]); if (pos[j] > pos[maxi]) maxi = j; if (pos[j] < pos[mini]) mini = j; } if (pos[mini] == -2) { ok[i] = ok[mini] = true; } else if (pos[maxi] == -1) { ok[i] = true; } else if (pos[maxi] == 2) { swap(perm[i], perm[maxi]); baseline += 2; ok[i] = ok[maxi] = true; } else { VI p; REP(j,i+1,n) if (pos[j] == 1) p.push_back(j); assert(p.size() == 2); swap(perm[i], perm[p[0]]); swap(perm[p[0]], perm[p[1]]); print(); int v; cin >> v; if (v == n) return 0; v -= baseline; if (v >= 2) { baseline += v; } else { swap(perm[i], perm[p[0]]); print(); cin >> baseline; if (baseline == n) return 0; } ok[i] = true; } assert(ok[i]); } return 0; }