def AllPermutations(elements, numElem=None, prefix=[]):
    if not numElem: numElem = len(elements)
    if numElem == 0:
        yield prefix
    else:
        for index in xrange(numElem):
            newPrefix = prefix[:]
            newPrefix.append(elements[index])
            newElements = elements[:index] + elements[index+1:]
            for perms in AllPermutations(newElements, numElem - 1, newPrefix):
                yield perms

if __name__ == "__main__":
    for perm in AllPermutations(list("ABCD")):
        print perm
