Combinações com repetições C #

Preciso de ajuda com combinações com repetição. Pesquisei por toda a rede e, embora tenha encontrado alguns exemplos, não os entendo completamente. Meu objetivo é simples: uma função (CombinationsWithRepetiion) recebe uma lista com itens (nesse caso, valores inteiros) e comprimento (que representa quanto tempo cada combinação pode ter) e retorna uma lista contendo o resultado.

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

resultado:

comprimento = 1: 1, 2, 3

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

length = 3: 111.112 ....

Espero que alguém me ajude e agradeço desde já!

questionAnswers(2)

yourAnswerToTheQuestion