队列
#include<bits/stdc++.h>
#include <queue>
using namespace std;
int main(){
// 队列
//约瑟夫问题NO.2
//思路:求第n个元素,就先把前n - 1个元素弹出压入队列尾部
// int n,p,m;
// while(cin >> n >> p >> m){
// if(n == 0 && p == 0 && m == 0){
// break;
// }
// queue<int> children;
// for(int i = 0;i < n;i++)
// children.push(i + 1);
// for(int i = 0;i < p - 1;i++){
// children.push(children.front());
// children.pop();
// }
// while(!children.empty()){
// for(int i = 0;i < m - 1;i++){ //m个小孩重新入队
// children.push(children.front());
// children.pop();
// }
// if(children.size() == 1){
// cout << children.front();
// }else {
// cout << children.front() << ",";
// }
// children.pop();
// }
// 猫狗收容所
struct animal{
int number;
int order;
animal(int u,int y):number(u),order(y){};
};
int n ;
cin >> n;
int order = 0;
queue<animal> cat;
queue<animal> dog;
for(int i = 0;i < n;i++){
int m,t;
cin >> m >> t;
if(m == 1){
if(t > 0){
dog.push(animal(t,order++));
}else if(t < 0){
cat.push(animal(t,order++));
}
}else if(m == 2){
if(t == 0 && !dog.empty() && !cat.empty()){
if(dog.front().order < cat.front().order){
cout << dog.front().number;
dog.pop();
}else{
cout << cat.front().number;
cat.pop();
}
}else if(t == 0 && dog.empty() && !cat.empty()){
cout << cat.front().number;
cat.pop();
}else if(t == 0 && !dog.empty() && cat.empty()){
cout << dog.front().number;
dog.pop();
}else if(t == 1 && !dog.empty()){
cout << dog.front().number;
dog.pop();
}else if(t == -1 && !cat.empty()){
cout << cat.front().number;
cat.pop();
}
}
}
cout << endl;
}