Generate all possible modes of list

I have a list of letter and number string
It may also be a word
I want to write all possible modes (length 10)
A common method is to use for

list = ["a", "b", "c", "d", "e", "1", "2", "3", "hey", "bye"]
for f1 <- list, ... , f10 <- list, do: [f1, ..., f10] |> List.to_string()

I feel this method does not make sense
Do you know a better way to make this example?


Possibly related:

There is this library

A library for this, really?

Think of it as example code.

I do not want to store all of these in one list, because the length is 10, I do not have enough memory to store all of them
Exactly I want the simple form of my first code to write a simple form instead of additional code (f1 → list)