added Cartesian product