#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也是同理,需要进行倒腾。