1. `combinations`
This iterator will produce tuples of length `r` with all the unique combinations of values from `iterable`.
(โUniqueโ will make use of the original position in `iterable`, and not the value itself.)
E.g., what ice cream flavour combinations can I get?
2. `combinations_with_replacement`
Same as `combinations`, but values can be repeated.
E.g., what ice cream flavour combinations can I get if I allow myself to repeat flavours?