#include<cstdio>
#include<cstring>
#include<string>
#include<queue>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#define fo(i,a,b) for(int i=(a);i<=(b);i++)
#define po(i,a,b) for(int i=(a);i>=(b);i--)
using namespace std;
const int N=1000006;
vector<int> qu[N],pre[N],ne[N];
int r[N],tot[N],size[N];
string s;
int a,x,q;
void push_back(int a,int x){
qu[a][++tot[a]]=x;
ne[a][r[a]]=tot[a];
pre[a][tot[a]]=r[a];
r[a]=tot[a];
size[a]++;
}
void push_front(int a,int x){
qu[a][++tot[a]]=x;
pre[a][ne[a][0]]=tot[a];
ne[a][tot[a]]=ne[a][0];
ne[a][0]=tot[a];
size[a]++;
}
void pop_back(int a){
if(size[a]){
size[a]--;
r[a]=pre[a][r[a]];
ne[a][r[a]]=0;
}
}
void pop_front(int a){
if(size[a]){
size[a]--;
ne[a][0]=ne[a][ne[a][0]];
pre[a][ne[a][0]]=0;
}
}
int main()
{
cin>>q;
fo(i,1,1e6){
qu[i].reserve(2);
pre[i].reserve(2);
ne[i].reserve(2);
ne[i][0]=0;
}
fo(i,1,q){
cin>>s>>a;
if(s=="push_back"){
cin>>x;
push_back(a,x);
}else if(s=="push_front"){
cin>>x;
push_front(a,x);
if(size[a]==1)r[a]=tot[a];
}else if(s=="pop_back"){
pop_back(a);
}else if(s=="pop_front"){
pop_front(a);
}else if(s=="size"){
cout<<size[a]<<endl;
}else if(s=="front"){
if(size[a])cout<<qu[a][ne[a][0]]<<endl;
}else {
if(size[a])cout<<qu[a][r[a]]<<endl;
}
}
return 0;
}