#include <bits/stdc++.h>
using namespace std;
#include "advisor.h"
void ComputeAdvice(int *A,int n,int m,int q){
vector<int> B(n,n),C(n);
for (int i(n-1);i > -1;--i){
C[i] = B[A[i]];
B[A[i]] = i;
}
vector<int> R(n+m),E(m); iota(E.begin(),E.end(),0);
multiset<tuple<int,int,int>,greater<tuple<int,int,int>>> M; set<int> S;
for (int i(0);i < m;++i) M.emplace(B[i],i,i),S.emplace(i);
for (int i(0);i < n;++i) if (!S.contains(A[i])){
auto [a,b,c] = *M.begin(); M.erase(M.begin()),S.erase(c);
R[E[b]] = 1,E[b] = m+i,M.emplace(C[i],b,A[i]),S.emplace(A[i]);
} else {
auto [a,b,c] = *M.rbegin(); M.erase(prev(M.end()));
E[b] = m+i,M.emplace(C[i],b,A[i]);
}
for (int i(0);i < n+m;++i) WriteAdvice(R[i]);
}
#include <bits/stdc++.h>
using namespace std;
#include "assistant.h"
void Assist(unsigned char *A,int n,int m,int q){
vector<int> B(m),C(n+m); iota(B.begin(),B.end(),0),iota(C.begin(),C.begin()+m,0);
set<int> S(B.begin(),B.end()),T;
for (int i(0);i < m;++i) if (A[i]) T.emplace(i);
for (int i(0);i < n;++i){
int x = GetRequest(); C[m+i] = x;
if (A[m+i]) T.emplace(m+i);
if (S.contains(x)) continue;
PutBack(C[*T.begin()]),S.erase(C[*T.begin()]),T.erase(T.begin());
S.emplace(x);
}
}