#include <utility>
#include <vector>
class CatDogAsylum {
void cleanup(vector<pair<int, bool>>& stacks) {
vector<pair<int, bool>> new_stacks;
for (const auto& s : stacks) {
if (s.second) new_stacks.push_back(s);
}
stacks =std::move(new_stacks);
}
public:
vector<int> asylum(vector<vector<int> > ope) {
// write code here
vector<int> res;
vector<pair<int, bool>> stacks;
for(auto op: ope){
if(op[0] == 1){
stacks.emplace_back(op[1], true);
}
if(op[0]==2){
if (op[1] == 0 ) {
for(auto &s: stacks){
if (s.second) {
res.emplace_back(s.first);
s.second=false;
break;
}
}
}
if (op[1] == -1) {
for(auto &s: stacks){
if (s.first<0 && s.second) {
res.emplace_back(s.first);
s.second = false;
break;
}
}
}
if (op[1] == 1) {
for(auto &s: stacks){
if (s.first>0 && s.second) {
res.emplace_back(s.first);
s.second=false;
break;
}
}
}
}
if(stacks.size()>1000)
cleanup(stacks);
}
return res;
}
};