#include using namespace std; template vector> cart_product (const vector>& v) { vector> s = {{}}; for (auto& u : v) { vector> r; for (auto& x : s) { for (auto y : u) { r.push_back(x); r.back().push_back(y); } } s.swap(r); } return s; }