const cartesian =
(...a) => a.reduce((a, b) => a.flatMap(d => b.map(e => [d, e].flat())));
https://cwestblog.com/2011/05/02/cartesian-product-of-multiple-arrays/
https://designcorral.com/questions/cartesian-product-of-multiple-arrays-in-javascript/
https://stackoverflow.com/questions/12303989/cartesian-product-of-multiple-arrays-in-javascript