def product_except_self(nums):
    output = [1] * len(nums)
    left = 1
    for i, value in enumerate(nums):
        output[i] = left
        left *= value
    right = 1
    for i in range(len(nums) - 1, -1, -1):
        output[i] *= right
        right *= nums[i]
    return output
