#include <bits//stdc++.h>
#include "library.h"
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef tree<long long, null_type, less<long long>, rb_tree_tag,
tree_order_statistics_node_update>
ordered_set;
typedef tree<long long, null_type, less_equal<long long>, rb_tree_tag,
tree_order_statistics_node_update>
ordered_multiset;
#define ll long long
#define iloop(m, h) for (auto i = m; i != h; i += (m < h ? 1 : -1))
#define jloop(m, h) for (auto j = m; j != h; j += (m < h ? 1 : -1))
#define kloop(m, h) for (auto k = m; k != h; k += (m < h ? 1 : -1))
#define lloop(m, h) for (auto l = m; l != h; l += (m < h ? 1 : -1))
#define pll pair<ll, ll>
#define INF 1000000000000000
#define MOD1 1000000007
#define MOD2 998244353
#define MOD3 1000000009
ll n, cs[1005], res[2];
vector<int> v, adj[1005];
void dnc(ll lb, ll ub, ll ad, ll t) {
if (lb == ub) {
if (t == 2) res[0] = res[1] = lb;
else res[t] = lb;
return;
}
ll mid = (lb + ub)>>1;
vector<int> v2;
iloop(0, n) v2.push_back(0);
iloop(0, mid+1) v2[i] = 1;
v2[ad] = 1;
ll tr = Query(v2);
if (t == 0) {
if (tr == cs[mid]) ub = mid;
else lb = mid + 1;
dnc(lb, ub, ad, t);
return;
}
if (t == 1) {
if (tr == cs[mid] - 1) ub = mid;
else lb = mid + 1;
dnc(lb, ub, ad, t);
return;
}
if (tr == cs[mid]) {
dnc(lb, mid, ad, 0);
dnc(mid+1, ub, ad, 1);
return;
}
if (tr == cs[mid] - 1) dnc(lb, mid, ad, 2);
else dnc(mid+1, ub, ad, 2);
}
void Solve(int N) {
n = N;
//cout << n << endl;
v.clear();
iloop(0, n) v.push_back(0);
iloop(0, n) {
v[i] = 1;
cs[i] = Query(v);
if (i && cs[i] < cs[i-1] + 1) {
dnc(0, i-1, i, (cs[i] == cs[i-1] ? 0 : 2));
if (cs[i] == cs[i-1]) {
adj[i].push_back(res[0]);
adj[res[0]].push_back(i);
}
else {
adj[i].push_back(res[0]);
adj[res[0]].push_back(i);
adj[i].push_back(res[1]);
adj[res[1]].push_back(i);
}
}
}
ll ej = 0;
iloop(0, n) if ((ll)adj[i].size() == 1) {ej = i; break;}
vector<int> ans;
ans.push_back(ej+1);
bool vis[n];
memset(vis, 0, sizeof(vis));
vis[ej] = 1;
iloop(0, n-1) {
for (auto it : adj[ej]) if (!vis[it]) {ej = it; break;}
ans.push_back(ej+1);
vis[ej] = 1;
}
//cout << "cao " << ans.size() << endl;
//for (auto it : ans) cout << it << " ";
Answer(ans);
}