```python
from functools import lru_cache
from typing import Dict


def fibonacci(n: int, memo: Dict[int, int] = None) -> int:
    """
    Compute the nth Fibonacci number using memoization.

    Args:
        n: The index in the Fibonacci sequence (0-indexed).
        memo: A dictionary used to cache previously computed results.

    Returns:
        The nth Fibonacci number.

    Example:
        >>> fibonacci(10)
        55
        >>> fibonacci(0)
        0
        >>> fibonacci(1)
        1
    """
    if memo is None:
        memo = {}

    if n < 0:
        raise ValueError("n must be a non-negative integer")

    if n in memo:
        return memo[n]

    if n == 0:
        return 0
    if n == 1:
        return 1

    memo[n] = fibonacci(n - 1, memo) + fibonacci(n - 2, memo)
    return memo[n]


if __name__ == "__main__":
    # Example usage
    for i in range(11):
        print(f"fibonacci({i}) = {fibonacci(i)}")
```

