#include <vector>
 
class Solution {
public:
    std::vector<int> productExceptSelf(std::vector<int>& nums) {
        int product = 1;
        std::vector<int> answer(nums.size(), 1);
 
        // prefix
        for (int i = 0; i < nums.size(); i++) {
            answer[i] = product;
            product *= nums[i];
        }
 
        product = 1;
 
        // suffix
        for (int i = nums.size() - 1; i >= 0; i--) {
            answer[i] *= product;
            product *= nums[i];
        }
 
        return answer;
    }
};