import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main_10845 {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();//출력할 (라인)데이터가 많다면 각각 라인 출력하기 보다는 모아서 한번에!!
int N = Integer.parseInt(br.readLine());// 명령어 수
//대기열 생성(큐 생성)
Queue<Integer> queue = new ArrayDeque<Integer>();
/*
queue
======================================
out <---- <---- in
======================================
*/
int last=-1;//마지막 요소를 저장!
for (int i = 0; i < N; i++) { //명령어 수 만큼 반복
StringTokenizer tokens = new StringTokenizer(br.readLine());
switch (tokens.nextToken()) {// push pop size empty front back //공백으로 구분된 첫번째 토큰
case "push":
//큐에 데이터 삽입
int value = Integer.parseInt(tokens.nextToken());
queue.offer(value); //"push 1" 중 두번째 토큰
last = value;
break;
case "pop":
sb.append(queue.isEmpty() ? -1 : queue.poll()).append('\n');
break;
case "size":
sb.append(queue.size()).append('\n');
break;
case "empty": //if~else ~ return 데이터 => 삼항 연산자 (조건식)? A : B
sb.append(queue.isEmpty() ? 1 : 0).append('\n');
break;
case "front":
sb.append(queue.isEmpty() ? -1 : queue.peek())
.append('\n');
break;
case "back":
sb.append(queue.isEmpty() ? -1 : last)
.append('\n');
break;
}
} // 각 명령어 처리
System.out.println(sb.toString());// 결과 출력
br.close();
}// main
}