from typing import Any, List


class Stack:

    def __init__(self, capacity: int = 1) -> None:
        self.capacity: int = capacity
        self.stack: List[Any] = [None] * self.capacity
        self.pointer: int = -1

    def size(self) -> int:
        return self.pointer + 1

    def is_empty(self) -> bool:
        return self.pointer == -1

    def is_full(self) -> bool:
        return self.pointer == self.capacity - 1

    def push(self, item:Any):
        if self.is_full():
            raise Exception('Stack is full')
        self.pointer += 1
        self.stack[self.pointer] = item

    def pop(self) -> Any:
        if self.is_empty():
            raise Exception('Stack is empty')
        item = self.stack[self.pointer]
        self.pointer -= 1
        return item

    def peek(self) -> Any:
        if self.is_empty():
            raise Exception('Stack is empty')
        return self.stack[self.pointer]


def reverse_string(s: str) -> str:
    stack: Stack = Stack(len(s))
    for character in s:
        stack.push(character)

    result: str = ""
    while not stack.is_empty():
        result += stack.pop()

    return result


string: str = "This string will be reversed ..."
print(reverse_string(string)) # ... desrever eb lliw gnirts sihT