#include<iostream>
#include<string>
using namespace std;
template<typename Tp>
class deque{
private:
int sz;
struct Node{
Node *l,*r;
Tp val;
}*begin,*end;
public:
deque(){
sz=0;
begin=new Node();
end=new Node();
begin->l=end->r=nullptr;
begin->r=end;
end->l=begin;
}
int size(){
return sz;
}
bool empty(){
return sz==0;
}
void push_back(Tp v){
Node *p=new Node();
p->val=v;
p->r=end;
end->l->r=p;
end->l=p;
sz++;
}
void push_front(Tp v){
Node *p=new Node();
p->val=v;
p->l=begin;
begin->r->l=p;
begin->r=p;
sz++;
}
void pop_front(){
if(sz==0)
return;
sz--;
Node *p=begin->r;
begin->r=begin->r->r;
delete p;
p=nullptr;
}
void pop_back(){
if(sz==0)
return;
sz--;
Node *p=end->l;
end->l=end->l->l;
delete p;
p=nullptr;
}
Tp front(){
return begin->r->val;
}
Tp back(){
return end->l->val;
}
};
int n;
deque<int>d[(int)(1e6+10)];
int main(){
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
cin>>n;
string opt;
int u,v;
while(n--){
cin>>opt>>u;
if(opt=="back"){
if(!d[u].empty())
cout<<d[u].back()<<'\n';
}
else if(opt=="front"){
if(!d[u].empty())
cout<<d[u].back()<<'\n';
}
else if(opt=="pop_back")
d[u].pop_back();
else if(opt=="pop_front")
d[u].pop_front();
else if(opt=="push_back"){
cin>>v;
d[u].push_back(v);
}
else if(opt=="push_front"){
cin>>v;
d[u].push_front(v);
}
else if(opt=="size")
cout<<d[u].size()<<'\n';
}
return 0;
}