Obtendo todas as permutações possíveis de uma sequência ou combinação, incluindo caracteres repetidos em Java

Eu tenho tentado gerar uma lista de todas as seqüências possíveis de 4 caracteres que podem ser compostas por qualquer conjunto de caracteres. Eu usei uma função para gerar cada combinação de 4 caracteres a partir de um conjunto de caracteres, mas cada caractere é usado apenas uma vez. Eu preciso de todas as combinações possíveis usando um determinado conjunto de caracteres, por exemplo:

String[] elements = {"a", "b", "c", "1", "2", "3"};
int[] indices;
CombinationGenerator x = new CombinationGenerator (elements.length, 4);
StringBuffer combination;
while (x.hasMore ()) {
  combination = new StringBuffer ();
  indices = x.getNext ();
  for (int i = 0; i < indices.length; i++) {
      combination.append (elements[indices[i]]);
  }
  System.out.println (combination.toString ());
}

Usando a classe CombinationGenerator deaqui, isso retornará todas as combinações exclusivas de 4 caracteres, como:

'abcd' , 'abc1', 'acb2', 'acb1'

Mas quero todas as sequências possíveis que possam ser criadas usando os caracteres fornecidos. Por exemplo:

'aaaa', 'aaab', 'abc1', 'aac1', '11c2'

Eu tentei todos os métodos recursivos e de permutação que consegui encontrar ou inventar, mas estou perplexo em ir além de gerar todas as combinações como acima, e depois gerar todas as permutações de cada combinação, mas não posso trabalhar como criar um conjunto de combinações usando caracteres repetidos.

Qualquer ajuda, ou mesmo apenas a teoria de como isso poderia ser feito, seria útil.

questionAnswers(5)

yourAnswerToTheQuestion