#include "cave.h"
#include "bits/stdc++.h"
using namespace std;
void exploreCave(int N) {
int S[N], D[N];
for (int i = 0; i < N; i++) S[i] = 0, D[i] = -1;
vector<int> guest(N, -1);
while (true) {
bool flag = true;
for (int i = 0; i < N; i++) if (D[i] == -1) {
flag = false;
break;
}
if (flag) break;
int curr = tryCombination(S);
// cout << curr << '\n';
// for (int i = 0; i < N; i++) cerr << S[i] << ' ';
// cout << '\n';
// for (int i = 0; i < N; i++) cerr << D[i] << ' ';
// cout << "\n\n";
// vector<array<int, 2>> order;
// for (int i = 0; i < N; i++) if (D[i] == -1) order.push_back({guest[i], i});
// sort(order.begin(), order.end());
for (int i = 0; i < N; i++) {
if (D[i] != -1) continue;
if (curr == -1) {
S[i] ^= 1;
int X = tryCombination(S);
D[i] = X, S[i] ^= 1, guest[i] = -1;
continue;
}
if (guest[i] != -1 && guest[i] > curr) continue;
S[i] ^= 1;
int X = tryCombination(S);
if (X == -1) D[i] = curr, curr = -1, guest[i] = -1;
else {
if (X > curr) D[i] = curr, curr = X, guest[i] = -1;
else if (X < curr) D[i] = X, S[i] ^= 1, guest[i] = -1;
else S[i] ^= 1, guest[i] = max(guest[i], curr);
}
}
for (int i = 0; i < N; i++)
if (D[i] == -1) S[i] = 1;
}
answer(S, D);
}