class MaxStack(Stack): def __init__(self) -> None: super().__init__() self.max_stack = Stack() def peek(self): return super().peek() def push(self, item: Any): if self.max_stack.empty(): self.max_stack.push(item) else: self.max_stack.push(max(item, self.max_stack.peek())) super().push(item) def pop(self): self.max_stack.pop() return super().pop() def max(self): """ Получить максимальный элемент. Не извлекает его из стека. """ return self.max_stack.peek() def empty(self): return super().empty() def __len__(self): return super().__len__() def __bool__(self): return super().__bool__()
def resolve(s: str): stack = Stack() first_open_pos = 0 open_brackets, close_brackets = ['(', '[', '{'], [')', ']', '}'] for i, ch in enumerate(s, 1): if ch in open_brackets: if stack.empty(): first_open_pos = i stack.push(ch) else: if stack.empty(): return i else: opened = stack.pop() if open_brackets.index(opened) != close_brackets.index(ch): return i if stack.empty(): return 'Success' else: return first_open_pos