def METHOD_NAME(original):
    split_rx = "and|&"
    joins = ["and", "&"]
    variants = []
    # tokenise around the SPLIT_RX
    bits = re.split(split_rx, original)
    expanded = [bits]
    while True:
        if len(expanded) == 0:
            break
        next = []
        for candidate in expanded:
            if len(candidate) > 1:
                for j in joins:
                    ccopy = deepcopy(candidate)
                    ccopy[0] = ccopy[0] + j + ccopy[1]
                    del ccopy[1]
                    next.append(ccopy)
            else:
                variants.append(_normalise_title(candidate[0]))
        expanded = next
    # stick the original one in at the end for reference
    variants.append(original)
    return tuple(variants)