def to_bits(cs):
    """Split a string into a list of numeric and non-numeric substrings."""

    if not cs:
        return []

    out = []
    tmp = ""
    is_number = True
    first = True
    for c in cs:
        if c in ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]:
            if is_number:
                tmp += c
            else:
                if not first:
                    out.append(tmp)
                tmp = c
                is_number = True
        else:
            if is_number:
                if not first:
                    out.append(tmp)
                tmp = c
                is_number = False
            else:
                tmp += c
        first = False
    if not first:
        out.append(tmp)
    return out