vb .net permutacja łańcucha. permutacja czy kombinacja?

mam dość takich sznurkówC - F - A - M. Chcę utworzyć kombinację z tym z warunkiem:

każdy inny element obok ostatniego znaku musi być połączony z ostatnim znakiem

nie ma takiej samej kombinacji, nawet kolejność jest inna. na przykład

FC - M

CF - M

jeśli tablica ciągów zawiera> = 3 element, wygeneruje 2 i 3 zestaw elementów, jeśli 2 element to wygeneruje tylko 2 zestaw elementów

poniżej jest mój kod. mój kod generuje wynik jak prawa część obrazu

moje pytanie brzmi: jakiej metody należy użyć? czy to permutacja, kombinacja czy inne rzeczy? a w pseudokodzie jaki byłby mój przypadek?

oto mój kod

Public Class permute
Dim ItemUsed() As Boolean
Dim pno As Long, pString As String
Dim inChars() As Char = {"c", "f", "a", "m"}

Private Sub permute_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  
End Sub

Sub Permute(ByVal K As Long)
    ReDim ItemUsed(K)
    pno = 0

    Dim i As Integer
    For i = 2 To K
        Permutate(i, 1)
        tb.Text = K
    Next
End Sub

Private Sub Permutate(ByVal K As Long, ByVal pLevel As Long)
    Dim i As Long, Perm As String
    Perm = pString

    For i = 0 To K - 1
        If Not ItemUsed(i) Then
            If pLevel = 1 Then
                pString = inChars(i)
            Else
                pString += inChars(i)
            End If
            If pLevel = K Then
                pno = pno + 1
                Results.Text += _
                pno & " " & " = " & " " & pString & vbCrLf
                Exit Sub
            End If

            ItemUsed(i) = True
            Permutate(K, pLevel + 1)
            ItemUsed(i) = False
            pString = Perm
        End If
    Next
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Permute(tb.Text)
End Sub

Private Sub tb_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles tb.TextChanged
    If tb.Text = "" Then
        Results.Text = ""
    Else
        Permute(tb.Text)
    End If
End Sub
End Class

Oto zrzut ekranu wymagań

a oto zrzut ekranu programu

questionAnswers(2)

yourAnswerToTheQuestion