//#include<stdio.h>
//int stack1[10005]={}, stack2[10005]={}, top1=-1, top2=-1;
//void push1()
//{
// top2++;
// stack2[top2]=stack1[top1];
// top1--;
// return;
//}
//void pop(int n)
//{
// if (n==1)
// {
// if (top1>-1)
// {
// top1--;
// }
// }
// else
// {
// if (top2>-1)
// {
// top2--;
// }
// }
// return;
//}
//int main()
//{
// int n,i,bo=0;
// scanf("%d", &n);
// for(i=1;i<=n;i++)
// {
// top2++;
// scanf("%d", &stack2[top2]);
// }
// for(i=1;i<=n;i++)
// {
// top1++;
// stack1[top1]=stack2[top2];
// top2--;
// }
// for(i=1;i<=n;i++)
// {
// bo = 0;
// if (stack2[top2]==i)
// {
// bo = 1;
// pop(2);
// continue;
// }
// while(top1!=-1)
// {
// if (stack1[top1]==i)
// {
// pop(1);
// bo=1;
// break;
// }
// else
// {
// push1();
// }
// }
// if (stack2[top2]==i)
// {
// bo = 1;
// pop(2);
// }
// if (!bo)
// {
// printf("Sad");
// return 0;
// }
// }
// printf("Nice");
// return 0;
//}
//#include<stdio.h>
//int q[2000005]={},top=-1, wi=-1;
//void push(int x)
//{
// top++;
// q[top]=x;
// return;
//}
//void pop()
//{
// if (wi<top)
// {
// wi++;
// printf("%d\n", q[wi]);
// }
// else
// {
// printf("-1\n");
// }
//}
//void size()
//{
// printf("%d\n", top-wi);
//}
//void empty()
//{
// if (top==wi)
// {
// printf("1\n");
// }
// else
// {
// printf("0\n");
// }
//}
//void front()
//{
// if (top>wi)
// {
// printf("%d\n", q[wi+1]);
// }
// else
// {
// printf("-1\n");
// }
//}
//void back()
//{
// if (top>wi)
// {
// printf("%d\n", q[top]);
// }
// else
// {
// printf("-1\n");
// }
//}
//int main()
//{
// int n, i,x;
// char cod[15]={};
// scanf("%d", &n);
// for(i=1;i<=n;i++)
// {
// scanf("%s", &cod);
// if (cod[0]=='p' && cod[1]=='u')
// {
// scanf("%d", &x);
// push(x);
// }
// else if (cod[1]=='o')
// {
// pop();
// }
// else if (cod[0]=='s')
// {
// size();
// }
// else if(cod[0]=='e')
// {
// empty();
// }
// else if (cod[0]=='f')
// {
// front();
// }
// else
// {
// back();
// }
// }
// return 0;
//}
//#include<stdio.h>
//int main()
//{
// int q[5000005]={}, top=-1, wi=-1, n,i;
// scanf("%d", &n);
// for(i=1;i<=n;i++)
// {
// top++;
// q[top]=i;
// }
// for(i=1;top>wi+1;i++)
// {
// if (i%2==1)
// {
// wi++;
// }
// else
// {
// wi++;
// top++;
// q[top]=q[wi];
// }
// }
// printf("%d", q[top]);
// return 0;
//}
//#include<stdio.h>
//int cnt,wi=1, arr[10005]={},n;
//void f(int x)
//{
// if (arr[wi]==-1)
// {
// wi++;
// f(x);
// }
// else if (arr[wi]==0)
// {
// wi=1;
// f(x);
// }
// else if (cnt>=x)
// {
// printf("%d", arr[wi]);
// arr[wi]= -1;
// return;
// }
// else
// {
// cnt++;
// wi++;
// f(x);
// }
// return;
//}
//int main()
//{
// int k,i;
// scanf("%d %d", &n, &k);
// for(i=1;i<=n;i++)
// {
// arr[i]=i;
// }
// printf("<");
// for(i=1;i<=n;i++)
// {
// cnt = 1;
// f(k);
// if (i<n)
// {
// printf(", ");
// }
// }
// printf(">");
// return 0;
//}
#include<stdio.h>
int deck[10000005]={}, top1=5000000, top2=5000001;
void c1(int x)
{
top1++;
deck[top1]=x;
return;
}
void c2(int x)
{
top2--;
deck[top2]=x;
}
void c3()
{
if (top1-1<top2)
{
printf("-1\n");
}
else
{
top1--;
printf("%d\n", deck[top1+1]);
}
}
void c4()
{
if (top2+1>top1)
{
printf("-1\n");
}
else
{
top2++;
printf("%d\n", deck[top2-1]);
}
}
void c5()
{
printf("%d\n", top1-top2+1);
}
void c6()
{
if (top1<top2)
{
printf("1\n");
}
else
{
printf("0\n");
}
}
void c7()
{
if (top1<top2)
{
printf("-1\n");
}
else
{
printf("%d\n", deck[top1]);
}
}
void c8()
{
if (top1<top2)
{
printf("-1\n");
}
else
{
printf("%d\n", deck[top2]);
}
}
int main()
{
int n, k;
scanf("%d", &n);
for(int i=1;i<=n;i++)
{
scanf("%d", &k);
if (k==1)
{
scanf("%d", &k);
c1(k);
}
if (k==2)
{
scanf("%d", &k);
c2(k);
}
if (k==3)
{
c3();
}
if (k==4)
{
c4();
}
if (k==5)
{
c5();
}
if (k==6)
{
c6();
}
if (k==7)
{
c7();
}
if (k==8)
{
c8();
}
}
return 0;
}