''' mbinary
#########################################################################
# File : permute_divide_and_conquer.py
# Author: mbinary
# Mail: zhuheqin1@gmail.com
# Blog: https://mbinary.xyz
# Github: https://github.com/mbinary
# Created Time: 2018-11-25  12:23
# Description:
#########################################################################
'''


def permute(lst, n):
    ''' O(n!), optimal'''
    if n == 1:
        print(lst)
    else:
        for i in range(n):
            lst[i], lst[n-1] = lst[n-1], lst[i]
            permute(lst, n-1)
            lst[i], lst[n-1] = lst[n-1], lst[i]


if __name__ == '__main__':
    n = 3
    permute([i for i in range(n)], n)
