#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;


    }
};