class MyStack:
def __init__(self):
# Используем список для хранения элементов
self.data = []
# Указатель на начало очереди (откуда забираем)
self.head = 0
# Указатель на конец очереди (куда добавляем)
self.tail = 0
def push(self, x: int) -> None:
# 1. Добавляем элемент в конец очереди (push to back)
self.data.append(x)
self.tail += 1
# 2. Перемещаем все элементы, которые были до него, в конец.
# Количество перемещений = текущий размер очереди минус 1.
# Размер очереди = tail - head
for _ in range(self.tail - self.head - 1):
# Забираем из начала (peek/pop from front)
val = self.data[self.head]
self.head += 1
# И кидаем в конец (push to back)
self.data.append(val)
self.tail += 1
def pop(self) -> int:
# Забираем первый элемент (вершину стека) из начала очереди
val = self.data[self.head]
self.head += 1
return val
def top(self) -> int:
# Просто смотрим на первый элемент в очереди
return self.data[self.head]
def empty(self) -> bool:
# Если указатели равны, значит элементов нет
return self.head == self.tail