#include<iostream>
using namespace std;
#define Maxsize 100
typedef struct SqQueue
{
int *base; //基地址
int front,rear;//队头和队尾
}SqQueue;
//循环队列的初始化
bool initQueue(SqQueue &Q)
{
Q.base = new int[Maxsize]; //Q.base可以看成是一个数组
if (!Q.base) return false;
Q.front = Q.rear = 0; //头尾指针置为0,队列为空
return true;
}
//循环队列的入队
bool enQueue(SqQueue &Q,int e)
{
if ((Q.rear + 1) % Maxsize == Q.front) return false;//尾指针后移一位等于头指针,表明队满
Q.base[Q.rear] = e; //Q.base可以看成是一个数组,Q.rear看做是下标
Q.rear = (Q.rear + 1) % Maxsize;//新元素插入队尾并将队尾指针加一
return true;
}
//循环队列的出队
bool deQueue(SqQueue &Q,int &e)
{
if (Q.front == Q.rear) return false;//队空
e = Q.base[Q.front]; //保存队头元素
Q.front = (Q.front + 1) % Maxsize; //对头指针加一
return true;
}
//循环队列的长度
int queueLen(SqQueue Q)
{
return (Q.rear - Q.front + Maxsize) % Maxsize;
}
//取循环队列的队头元素
int getHead(SqQueue Q)
{
if (Q.front != Q.rear) return Q.base[Q.front];//队列不为空
return -1;
}
int main()
{
SqQueue Q;
int n,x; //n表示元素的个数
initQueue(Q);
cin >> n;
while (n--)
{
cin >> x;
enQueue(Q,x);
}
cout << queueLen(Q) << endl;
cout << getHead(Q) << endl;
while(true)
{
if (deQueue(Q,x)) cout << x << " ";
else break; //注意,这里写return -1不可以
}
return 0;
}