지금까지 세상에 존재하지 않았던 새로운 자료구조 Queueueue를 소개한다. 자료구조 Queueueue는 가로 Queue와 세로 Queue로 구성되어 있으며, 두 Queue가 십자가로 겹친 형태이다. 즉, 원소 1개에 대해서 중간 지점을 공유하고 있다. Queueueue의 정확한 정의는 다음과 같다.
처음에 Queueueue는 비어있으며 Queueueue는 다음 13가지 명령을 할 수 있다.
hpush x : 가로 Queue의 맨 뒤에 정수 $x$를 넣는다. $(1 \le x \le 100\,000)$hpop : 가로 Queue에 정수가 있다면 맨 앞에 있는 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.hfront : 가로 Queue에 정수가 있다면 맨 앞에 있는 정수를 출력한다. 없다면 -1을 대신 출력한다.hback : 가로 Queue에 정수가 있다면 맨 뒤에 있는 정수를 출력한다. 없다면 -1을 대신 출력한다.hsize : 가로 Queue에 들어있는 정수의 개수를 출력한다.vpush x : 세로 Queue의 맨 뒤에 정수 $x$를 넣는다. $(1 \le x \le 100\,000)$vpop : 세로 Queue에 정수가 있다면 맨 앞에 있는 정수를 빼고 출력한다. 없다면 -1을 대신 출력한다.vfront : 세로 Queue에 정수가 있다면 맨 앞에 있는 정수를 출력한다. 없다면 -1을 대신 출력한다.vback : 세로 Queue에 정수가 있다면 맨 뒤에 있는 정수를 출력한다. 없다면 -1을 대신 출력한다.vsize : 세로 Queue에 들어있는 정수의 개수를 출력한다.size : Queueueue에 들어있는 정수의 개수를 출력한다.empty : Queueueue가 비어있으면 1, 아니면 0을 출력한다.middle : Queueueue에 정수가 있다면 Queueueue의 공유 원소에 해당하는 정수를 출력한다. 없다면 -1을 대신 출력한다.첫 번째 줄에 명령의 수 $N$이 주어진다. $(1 \le N \le 2\,000\,000)$
두 번째 줄부터 $N$개의 줄에 걸쳐 명령이 하나씩 주어진다.
출력을 요구하는 명령이 주어질 때마다, 명령의 결과를 한 줄에 하나씩 출력한다.