#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<ll, ll>
#define fi first
#define sec second
#define ld long double
const int MAXN = 150;
const ll INF = 1e18;
const int MOD = 1e9 + 7;
ll dp[MAXN + 5][MAXN + 5], ans[MAXN + 5];
int main(){
// ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int tc = 1;
// cin >> tc;
for(;tc--;){
ll N; cin >> N;
dp[1][1] = 1;
ans[1] = 1;
ll cur = 2;
auto query = [&](ll l, ll r){
if(dp[l][r]) return dp[l][r];
vector<ll> v;
for(int i = l; i <= r; i++) v.push_back(i);
cout << (int)v.size() << " ";
for(auto x : v) cout << x << " ";
cout << endl;
ll x; cin >> x;
dp[l][r] = x;
return x;
};
for(int i = 2; i <= N; i++){
ll lf = 1, rg = i - 1, pt = -1;
for(;lf <= rg;){
ll mid = (lf + rg) / 2;
if(query(mid, i) == query(mid, i - 1)){
pt = mid;
lf = mid + 1;
}
else rg = mid - 1;
}
if(pt == -1) ans[i] = cur++;
else ans[i] = ans[pt];
set<ll> st;
for(int j = i; j >= 1; --j){
st.insert(ans[j]);
dp[j][i] = (int)st.size();
}
}
cout << 0 << " ";
for(int i = 1; i <= N; i++){
cout << ans[i] << " ";
}
cout << endl;
}
}
/*
*/
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |