Combinaciones con repeticiones C #

Necesito ayuda con Combinaciones con repetición. He buscado en toda la red y, aunque encontré algunos ejemplos, no puedo entenderlos por completo. Mi objetivo es una función simple (CombinationsWithRepetiion) recibe una lista con elementos (en este caso, valores enteros) y longitud (que representa el tiempo que puede durar cada combinación) y devuelve una lista que contiene el resultado.

    List<int> input = new List<int>() {1, 2, 3}
    CombinationsWithRepetition(input, length);

resultado:

longitud = 1: 1, 2, 3

longitud = 2: 11,12,13,21,22,23,31,32,33

longitud = 3: 111,112 ....

Espero que alguien me ayude y gracias de antemano!

Respuestas a la pregunta(2)

Su respuesta a la pregunta