from collections import deque
import sys
input = sys.stdin.readline
N = int(input())
deque = deque()
for _ in range(N):
command = input().split()
cmd_type = command[0]
if cmd_type == '1':
deque.appendleft(command[1])
elif cmd_type == '2':
deque.append(command[1])
elif cmd_type == '3':
print(deque.popleft() if deque else -1)
elif cmd_type == '4':
print(deque.pop() if deque else -1)
elif cmd_type == '5':
print(len(deque))
elif cmd_type == '6':
print(0 if deque else 1)
elif cmd_type == '7':
print(deque[0] if deque else -1)
elif cmd_type == '8':
print(deque[-1] if deque else -1)
덱(Deque, Double-Ended Queue)은 양쪽 끝에서 데이터를 추가하거나 제거할 수 있는 유연한 자료 구조다. 일반적인 큐는 FIFO(First-In-First-Out) 구조를 가지지만, 덱은 양쪽 끝에서 요소를 추가하거나 제거할 수 있어서 더 다양한 상황에 활용할 수 있다.
덱은 스택과 큐의 기능을 모두 통합한 형태로 볼 수 있으며, 다음과 같은 작업을 효율적으로 수행할 수 있다:
파이썬에서는 collections 모듈의 deque 클래스를 통해 덱을 사용할 수 있다. 이 클래스는 양방향 큐의 모든 기능을 제공하며, 리스트에 비해 양쪽 끝에서의 요소 추가 및 제거가 훨씬 더 효율적이다.