```1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 ``` ```def swap(items, i, j): items[i], items[j] = items[j], items[i] return items def move_to_left(items): for i in range(1, len(items)): if items[i] > items[0]: return swap(items, i, 0) def leftward(items, i, j): return items[:j] + [items[i]] + items[j:i] def rightward(items, i, j): return items[:j] + items[i:] + items[j:i] def permute_subset(items): permutations = [] end = len(items) - 1 i = end while i != 1: swapped = False for j in range(i-1, 0, -1): if items[i] > items[j]: if i-j > 2 and items[i-1] > items[j+1]: break if i == end: items = leftward(items, i, j) for x in range(j+1,i): if items[x] > items[x+1]: items = swap(items, x, x+1) else: items = rightward(items, i, j) permutations += [items] swapped = True break if swapped is False: i = i - 1 else: i = end swapped = False return permutations def permute(items): permutations = [] for i in range(len(items)): permutations += [items[:]] permutations += permute_subset(items) items = move_to_left(items) return permutations p = permute([1,2,3,4,5]) for _ in p: print _ ```
 ```1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 ``` ```[1, 2, 3, 4, 5] [1, 2, 3, 5, 4] [1, 2, 4, 3, 5] [1, 2, 4, 5, 3] [1, 2, 5, 3, 4] [1, 2, 5, 4, 3] [1, 3, 2, 4, 5] [1, 3, 2, 5, 4] [1, 3, 4, 2, 5] [1, 3, 4, 5, 2] [1, 3, 5, 2, 4] [1, 3, 5, 4, 2] [1, 4, 2, 3, 5] [1, 4, 2, 5, 3] [1, 4, 3, 2, 5] [1, 4, 3, 5, 2] [1, 4, 5, 2, 3] [1, 4, 5, 3, 2] [1, 5, 3, 2, 4] [1, 5, 3, 4, 2] [1, 5, 4, 2, 3] [1, 5, 4, 3, 2] [2, 1, 3, 4, 5] [2, 1, 3, 5, 4] [2, 1, 4, 3, 5] [2, 1, 4, 5, 3] [2, 1, 5, 3, 4] [2, 1, 5, 4, 3] [2, 3, 1, 4, 5] [2, 3, 1, 5, 4] [2, 3, 4, 1, 5] [2, 3, 4, 5, 1] [2, 3, 5, 1, 4] [2, 3, 5, 4, 1] [2, 4, 1, 3, 5] [2, 4, 1, 5, 3] [2, 4, 3, 1, 5] [2, 4, 3, 5, 1] [2, 4, 5, 1, 3] [2, 4, 5, 3, 1] [2, 5, 3, 1, 4] [2, 5, 3, 4, 1] [2, 5, 4, 1, 3] [2, 5, 4, 3, 1] [3, 1, 2, 4, 5] [3, 1, 2, 5, 4] [3, 1, 4, 2, 5] [3, 1, 4, 5, 2] [3, 1, 5, 2, 4] [3, 1, 5, 4, 2] [3, 2, 1, 4, 5] [3, 2, 1, 5, 4] [3, 2, 4, 1, 5] [3, 2, 4, 5, 1] [3, 2, 5, 1, 4] [3, 2, 5, 4, 1] [3, 4, 1, 2, 5] [3, 4, 1, 5, 2] [3, 4, 2, 1, 5] [3, 4, 2, 5, 1] [3, 4, 5, 1, 2] [3, 4, 5, 2, 1] [3, 5, 2, 1, 4] [3, 5, 2, 4, 1] [3, 5, 4, 1, 2] [3, 5, 4, 2, 1] [4, 1, 2, 3, 5] [4, 1, 2, 5, 3] [4, 1, 3, 2, 5] [4, 1, 3, 5, 2] [4, 1, 5, 2, 3] [4, 1, 5, 3, 2] [4, 2, 1, 3, 5] [4, 2, 1, 5, 3] [4, 2, 3, 1, 5] [4, 2, 3, 5, 1] [4, 2, 5, 1, 3] [4, 2, 5, 3, 1] [4, 3, 1, 2, 5] [4, 3, 1, 5, 2] [4, 3, 2, 1, 5] [4, 3, 2, 5, 1] [4, 3, 5, 1, 2] [4, 3, 5, 2, 1] [4, 5, 2, 1, 3] [4, 5, 2, 3, 1] [4, 5, 3, 1, 2] [4, 5, 3, 2, 1] [5, 1, 2, 3, 4] [5, 1, 2, 4, 3] [5, 1, 3, 2, 4] [5, 1, 3, 4, 2] [5, 1, 4, 2, 3] [5, 1, 4, 3, 2] [5, 2, 1, 3, 4] [5, 2, 1, 4, 3] [5, 2, 3, 1, 4] [5, 2, 3, 4, 1] [5, 2, 4, 1, 3] [5, 2, 4, 3, 1] [5, 3, 1, 2, 4] [5, 3, 1, 4, 2] [5, 3, 2, 1, 4] [5, 3, 2, 4, 1] [5, 3, 4, 1, 2] [5, 3, 4, 2, 1] [5, 4, 2, 1, 3] [5, 4, 2, 3, 1] [5, 4, 3, 1, 2] [5, 4, 3, 2, 1] ```