def make_dict(name, words, *args, **kwargs):
    """
    make_dict(name, words, *args, **kwargs) -> mapping subclass

    Takes a sequence of words (or a pre-built Czech HashInfo) and returns a
    mapping subclass called `name` (used a dict) that employs the use of the
    minimal perfect hash.

    This mapping subclass has guaranteed O(1) worst-case lookups, additions,
    and deletions, however is slower than dict() in practice.

    >>> months = 'jan feb mar apr may jun jul aug sep oct nov dec'.split()
    >>> MyDict = make_dict('MyDict', months)
    >>> d = MyDict(dec=21, feb=None, may='hello')
    >>> d['jul'] = False
    >>> d
    MyDict([('feb', None), ('may', 'hello'), ('jul', False), ('dec', 21)])
    >>> del d['may']
    >>> del d['apr']
    Traceback (most recent call last):
    ...
    KeyError: 'apr'
    >>> len(d)
    3
    """

    info = CzechHashBuilder(words, *args, **kwargs)

    # Create a docstring that at least describes where the class came from...
    doc = """
        Dictionary-like object that uses minimal perfect hashing, perserving
        original order. This class was generated by `%s.%s(%r, ...)`.
        """ % (__name__, make_dict.__name__, name)

    # Delegate to create_dict.
    return create_dict_subclass(name, info.hash_function, info.words, doc)