def permutations(nums):
    output, path = [], []
    used = [False] * len(nums)
    def visit():
        if len(path) == len(nums):
            output.append(path.copy())
            return
        for i, value in enumerate(nums):
            if used[i]:
                continue
            used[i] = True
            path.append(value)
            visit()
            path.pop()
            used[i] = False
    visit()
    return output
