add cartesian_product