from typing import Generic, TypeVar T = TypeVar('T') class Stack(Generic[T]): def __init__(self): self.top: int = 0 self.data: list[T] = [] def push(self, value: T): self.data.append(value) self.top += 1 def pop(self) -> T | None: if self.top > 0: self.top -= 1 return self.data.pop() else: return None def peek(self) -> T | None: if self.top > 0: return self.data[self.top - 1] else: return None def is_empty(self) -> bool: return self.top == 0 def size(self) -> int: return self.top