// つら #include #include #define all(v) v.begin(), v.end() #define eb emplace_back #define fast cin.tie(nullptr); ios_base::sync_with_stdio(false) using namespace std; using namespace atcoder; using ll = long long; using ull = unsigned long long; constexpr ll mod = 998244353; bool query(vector &b){ int s = b.size(); cout << "? " << s << " "; for(int i=0;i> res; return res == "Yes"; } int n; int main(){ fast; cin >> n; vector cnt(n + 1); int rem = n; for(int i = 1; i <= n; i++){ if(rem == 0) break; vector tmp; int c = 0; for(int j = 1; j <= rem; j++){ tmp.eb(i); if(!query(tmp)){ c = j - 1; break; } c = j; } cnt[i] = c; rem -= cnt[i]; } vector ans = vector(cnt[1],1); for(int i = 2; i <= n; i++){ vector ins; for(int k = 1; k <= cnt[i]; k++){ int l = 0, r = ans.size() + 1; while(r - l > 1){ int m = (l + r) / 2; vector tmp; for(int j = 0; j < m; j++){ tmp.eb(ans[j]); } for(int j = 0; j < k; j++){ tmp.eb(i); } if(query(tmp)){ l = m; } else{ r = m; } } ins.eb(l + k - 1); } for(int k = 0; k < cnt[i]; k++){ ans.insert(ans.begin() + ins[k], i); } } cout << "! "; for(auto &x : ans){ cout << x << " "; } cout << endl; }