def zeller(config, n):
    """
    Splits up the input config into n pieces as used by Zeller in the original
    reference implementation. The approach works iteratively in n steps, first
    slicing off a chunk sized 1/n-th of the original config, then slicing off
    1/(n-1)-th of the remainder, and so on, until the last piece is halved
    (always using integers division).

    :param config: The configuration to split.
    :param n: The number of sets the configuration will be split up to.
    :return: List of the split sets.
    """
    subsets = []
    start = 0
    for i in range(n):
        subset = config[start:start + (len(config) - start) // (n - i)]
        subsets.append(subset)
        start += len(subset)
    return subsets