#include <cstdio>
using namespace std;
const int
NSIZE = 100000,
CSIZE = 1000;
int n, c, r, tail, head, s[NSIZE], q[CSIZE];
//数组 s 模拟一个栈,n 为栈的元素个数
//数组 q 模拟一个循环队列,tail 为队尾的下标,head 为队头的下标
bool direction, empty;
int previous(int k)
{
if (direction)
return ((k + c - 2) % c) + 1;
else
return (k % c) + 1;
}
int next(int k)
{
if (direction)
_____(1)_____;
else
return ((k + c - 2) % c) + 1;
}
void push()
{
int element;
cin>>element;
if (next(head) == tail)
{
n++;
_____(2)_____;
tail = next(tail);
}
if (empty)
empty = false;
else
head = next(head);
_____(3)____= element;
}
void pop()
{
if (empty)
{
cout<<"Error: the stack is empty!"<<endl;
return;
}
cout<<____(4)_____<<endl;
if (tail == head)
empty = true;
else
{
head = previous(head);
if (n > 0)
{
tail = previous(tail);
____(5)____= s[n];
n--;
}
}
}
void reverse()
{
int temp;
if (_____(6)_____== tail)
{
direction = !direction;
temp = head;
head = tail;
tail = temp;
}
else
cout<<"Error: less than "<<c<<" elements in the stack!"<<endl;
}
int main()
{
cin>>c;
n = 0;
tail = 1;
head = 1;
empty = true;
direction = true;
do
{
cin>>r;
switch (r)
{
case 1: push(); break;
case 2: pop(); break;
case 3: reverse(); break;
}
} while (r != 0);
return 0;
}