from collections import deque
from typing import Generator, TypeVar

T1 = TypeVar("T1")
T2 = TypeVar("T2")
T3 = TypeVar("T3")


def iterator_with_checks(
    generator: Generator[T1, T2, T3],
) -> Generator[tuple[T1, bool], T2, T3]:

    # Here we can ignore to catch stop iteration
    #   we will propagate it
    last_element = next(generator)

    while True:

        RETURN_ELEMENT = last_element
        try:
            element = next(generator)
            last_element = element
            yield (RETURN_ELEMENT, False)

        except StopIteration:
            yield (RETURN_ELEMENT, True)
            break
