#include<bits/stdc++.h>
using namespace std;
class MyQueue{
public:
stack<int>s1;
stack<int>s2;
MyQueue(){}
void add(int);
void poll();
int peek();
};
void MyQueue::add(int val)
{
if(!s2.empty()){
while(!s2.empty()){
s1.push(s2.top());
s2.pop();
}
}
s1.push(val);
}
void MyQueue::poll()
{
while(!s1.empty()){
s2.push(s1.top());
s1.pop();
}
s2.pop();
while(!s2.empty()){
s1.push(s2.top());
s2.pop();
}
}
int MyQueue::peek()
{
if(!s2.empty()){
return s2.top();
}else{
while(!s1.empty()){
s2.push(s1.top());
s1.pop();
}
return s2.top();
}
}
int main()
{
int n;
cin>>n;
string op;
int val;
MyQueue q;
while(cin>>op){
if(op=="add"){
cin>>val;
q.add(val);
}else if(op=="poll"){
q.poll();
}else if(op=="peek"){
cout<<q.peek()<<endl;
}
}
return 0;
}
栈是FILO而队列是FIFO,栈底就是队头,因此需要两个栈S1和S2,将S1按顺序压入S2,S2的栈顶就是队头。因此add操作需要判断S2是否为空,不为空就需要将S2倒腾回S1,再进行操作,就是在队尾进行压入;poll 和 peek也是同理,需要进行倒腾。