Imprima todas las combinaciones posibles de la cantidad de caracteres "X" con la longitud de la cadena "X" (Fuerza bruta)

Estoy tratando de escribir un generador de combinación de palabras, quiero imprimir todas las combinaciones posibles de "X" cantidad de caracteres con "X" longitud de cadena,

En primer lugar, debo decir que vi una pregunta en StackOverFlow sobre exactamente este problema que tiene muchas respuestas de generadores de palabras para hacer exactamente esto (en diferentes idiomas), pero por favor, no marque esto como duplicado o no comente mi pregunta solo para hacer referencia a ese enlace porque he probado TODOS los códigos C # y VBNET de esa pregunta y realmente ninguno funciona al 100% como se esperaba, vea las combinaciones que necesito:

Por ejemplo, si tengo los caracteres "a", "b" y "c", y quiero hacer todas las combinaciones de esos caracteres en una cadena de "3" de longitud, este es el resultado que espero:

' Expected result, 27 combinations:
'
' aaa
' aab
' aac
'
' aba
' abb
' abc
'
' aca
' acb
' acc
'
' baa
' bab
' bac
'
' bba
' bbb
' bbc
'
' bca
' bcb
' bcc
'
' caa
' cab
' cac
'
' cba
' cbb
' cbc
'
' cca
' ccb
' ccc

(El tipo no importa, puedo ordenarlo más tarde).

... Pero hasta ahora de ese resultado esperado, esto es lo que podría obtener:

'a
'aa
'aaa
'b
'bb
'bbb
'c
'cc
'ccc

Lo he hecho esta vez en dos idiomas (Ruby y Batch) pero usando Fors anidados (muchos Fors juntos para agregar solo una letra al otro para la salida), por supuesto, si estoy intentando hacer esto en VBNET es para evitar la demanda de muchos Fors, y hacerlo de una mejor manera.

En el código a continuación, puede ver cómo trato de asignar todas las combinaciones en la memoria RAM (una matriz) en lugar de escribirlas en el disco físico, por lo que quiero escribir este código con un método lógico y con un mejor rendimiento, luego Quiero guardar todas las combinaciones "en la memoria" primero y esa es la razón por la que no quiero usar muchos fors (el rendimiento).

Este fue mi último intento, todo se explica en líneas de comentarios:

Public Class Form1

    Dim characters As Char()  ' Default value: {"a","b","c"}
    Dim StringLength As Int64 ' Default value: 3
    Dim TotalCombinations As Int64 ' Default value: 27
    Dim strarray(99999999) As String ' Default size: "99.999.999" million of combinations in memory (I need to confirm this from an expert).

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    Dim index As Int64 = 0

    For column As Int64 = 0 To TotalCombinations - 1 ' For 0 to 26

        For Each character As Char In characters ' Characters = {"a","b","c"}

            If column < index Then
                index = 0 ' I reset index value 'cause... just experimenting things.
                Try
                    strarray(index) += characters(index)
                    RichTextBox1.Text += strarray(index) & ControlChars.NewLine
                Catch
                End Try
            Else
                Try
                    strarray(index) += characters(index)
                    RichTextBox1.Text += strarray(index) & ControlChars.NewLine
                Catch
                End Try
            End If
        Next

        index += 1

    Next

    End Sub

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
        characters = sender.text.ToCharArray ' Result: {"a","b","c"}
        Calculate_Combinations() ' Result: 27
    End Sub

    Private Sub NumericUpDown1_ValueChanged(sender As Object, e As EventArgs) Handles NumericUpDown1.ValueChanged
        StringLength = sender.value ' Result: 3
        Calculate_Combinations() ' Result: 27
    End Sub

    Private Sub Calculate_Combinations()
        Try
            TotalCombinations = ((characters.LongLength * StringLength) * StringLength) ' Result: 27
            Label1.Text = ((characters.LongLength * StringLength) * StringLength) & " number of combinations." ' Result: 27
        Catch : End Try
    End Sub

End Class

Necesito ayuda precisa.

Respuestas a la pregunta(2)

Su respuesta a la pregunta