def subsets(nums):
    output, path = [], []
    def visit(start):
        output.append(path.copy())
        for i in range(start, len(nums)):
            path.append(nums[i])
            visit(i + 1)
            path.pop()
    visit(0)
    return output
