List manipulation: subsets from a ragged array

Suppose I have the following list:

originalList = {{a},{b,c},{d,e,f}}

Now, I want to create a new list such that each element of this new list is also list containing 3 elements. Each of this 3 elements comes from different subsets of the originalList. In other words, how do I create the following list:

{{a,b,d},{a,b,e},{a,b,f},{a,c,d},{a,c,e},{a,c,f}}

Thanks in advance.

Sounds like Outer:

originalList = {{a}, {b, c}, {d, e, f}};
Flatten[Outer[List, Sequence @@ originalList], 2]
Out[]= {{a, b, d}, {a, b, e}, {a, b, f}, {a, c, d}, {a, c, e}, {a, c, f}}

Though Outer is definitely possible, I would definitely used Tuples in this case!

originalList = {{a}, {b, c}, {d, e, f}}
Tuples[originalList]

much much easier!

Yes, this is neat!

Also note that Tuples will generally be faster than Outer for this operation. Generally Outer is kinda slow because it generally(always?) does not vectorizes calculations… which is sometimes possible…