public List <string> GetPossibleWordsFromCharacters(string availableCharacters, string currentWord)
    {
        List <string> foundWords = new List <string>();

        if (endsWord)
        {
            foundWords.Add(currentWord);
        }
        string distinctCharacters = new string(availableCharacters.Distinct().ToArray());

        for (int i = 0; i < distinctCharacters.Length; i++)
        {
            char   selectedCharacter     = distinctCharacters[i];
            int    indexOfFirstCharacter = availableCharacters.IndexOf(selectedCharacter);
            string restOfInput           = availableCharacters.Substring(0, indexOfFirstCharacter) + availableCharacters.Substring(indexOfFirstCharacter + 1, availableCharacters.Length - (indexOfFirstCharacter + 1));
            string currentWordPrime      = currentWord + selectedCharacter;



            if (ContainsChar(selectedCharacter))
            {
                TrieBranch branchToCheck = childBranches[selectedCharacter];
                foundWords.AddRange(branchToCheck.GetPossibleWordsFromCharacters(restOfInput, currentWordPrime));
            }
        }

        return(foundWords);
    }