#include <cstdio>
#include <vector>
#include <bitset>
#include <iostream>
#include <stack>
#include "library.h"
using namespace std;
#define f first
#define s second
int const N = 1010;
void Solve(int n){
vector<pair<pair<int,int>,bitset<N>>> com;
vector<vector<int>> connect(n);
vector<int> M(n,0);
int last = 0;
for(int i{}; i < n; i++) {
M[i] = 1;
int ret = Query(M);
// for(auto [n,k]:com){
// cout << k << " " << n.f << "-" << n.s << endl;
// }
//cout << ret << " " << last << endl;
//cout << "_________" << endl;
if(ret > last){
bitset<N> temp;
temp[i] = 1;
com.emplace_back(make_pair(i,i),temp);
}
else if(ret == last){
int l = 0;
int r = com.size()-1;
while(l <= r){
int md = l+(r-l)/2;
bitset<N> bs(0);
for(int i{l};i <= md;i++){
bs |= com[i].s;
}
vector<int> temp(n,0);
for(int j{};j < n;j++){
if(bs[j]) temp[j] = 1;
}
temp[i] = 1;
int Bret = Query(temp);
if(Bret == (md-l+1)){
if(md == l){
com[md].s |= (1 << i);
vector<int> tempt(n,0);
tempt[com[md].f.f] = 1;
tempt[i] = 1;
if(Query(tempt) == 1){
connect[com[md].f.f].emplace_back(i);
connect[i].emplace_back(com[md].f.f);
}
else{
connect[com[md].f.s].emplace_back(i);
connect[i].emplace_back(com[md].f.s);
}
//cout << md << " " << i << endl;
l = r;
}
r = md-1;
}
else l = md+1;
}
}
else if(ret < last){
int l = 0;
int r = com.size()-1;
int find1;
while(l <= r){
int md = l+(r-l)/2;
bitset<N> bs(0);
for(int i{l};i <= md;i++){
bs |= com[i].s;
}
vector<int> temp(n,0);
for(int j{};j < n;j++){
if(bs[j]) temp[j] = 1;
}
temp[i] = 1;
int Bret = Query(temp);
if(Bret <= (md-l+1)){
if(md == l){
com[md].s[i] = 1;
vector<int> tempt(n,0);
tempt[com[md].f.f] = 1;
tempt[i] = 1;
if(Query(tempt) == 1){
connect[com[md].f.f].emplace_back(i);
connect[i].emplace_back(com[md].f.f);
}
else{
connect[com[md].f.s].emplace_back(i);
connect[i].emplace_back(com[md].f.s);
}
find1 = md;
l = r;
}
r = md-1;
}
else l = md+1;
}
l = 0;
r = com.size()-1;
int find2;
while(l <= r){
int md = l+(r-l)/2;
bitset<N> bs(0);
for(int i{l};i <= md;i++){
if(i != find1) bs |= com[i].s;
}
if(bs == 0){
l = md+1;
continue;
}
vector<int> temp(n,0);
for(int j{};j < n;j++){
if(bs[j]) temp[j] = 1;
}
temp[i] = 1;
int Bret = Query(temp);
if(Bret <= (md-l+1)){
if(md == l){
com[md].s[i] = 1;
vector<int> tempt(n,0);
tempt[com[md].f.f] = 1;
tempt[i] = 1;
if(Query(tempt) == 1){
connect[com[md].f.f].emplace_back(i);
connect[i].emplace_back(com[md].f.f);
com[md].f.f = i;
}
else{
connect[com[md].f.s].emplace_back(i);
connect[i].emplace_back(com[md].f.s);
com[md].f.s = i;
}
find2 = md;
l = r;
}
r = md-1;
}
else l = md+1;
}
//cout << find1 << " " << find2 << endl;
com[find1].s |= com[find2].s;
if(com[find1].f.f < com[find2].f.f){
com[find1].f.s = com[find2].f.s;
}
else{
com[find1].f.f = com[find2].f.f;
}
com.erase((com.begin()+find2));
}
last = ret;
}
int beg;
for(int i{};i < n;i++){
if(connect[i].size() == 0){
beg = i;
break;
}
}
// for(auto [n,k]:com) cout << k << endl;
// //cout << ret << " " << last << endl;
// cout << "_________" << endl;
stack<int> st;
st.emplace(beg);
vector<int> ans;
vector<bool> in(n);
while(!st.empty()){
int pos = st.top();st.pop();
if(in[pos]) continue;
in[pos] = true;
ans.emplace_back(pos+1);
for(auto k:connect[pos]){
st.emplace(k);
}
}
// for(int i{};i < n;i++){
// cout << i << " : ";
// for(auto k:connect[i]) cout << k << " ";
// cout << endl;
// }
// for(auto k:ans) cout << k << " ";
Answer(ans);
}