private static void recursiveWordsFit(List <string> wordsThatFit, bool isFirstCall = false)
        {
            foreach (var word in wordsThatFit)
            {
                if (isFirstCall)
                {
                    anagram.Clear();
                    remainingText = sentence;
                }

                anagram.Add(word);

                string remainingTextBefore = new string(remainingText);
                bool   remainingChar       = true;
                foreach (var c in word)
                {
                    int indexOfChar = remainingText.IndexOf(c);
                    if (indexOfChar != -1)
                    {
                        remainingText = remainingText.Remove(indexOfChar, 1);
                    }
                    else
                    {
                        remainingChar = false;
                    }
                }

                if (!remainingChar)
                {
                    anagram.RemoveAt(anagram.Count - 1);
                    remainingText = remainingTextBefore;

                    continue;
                }

                wordsThatFitRemaining = AnagramSolver.SearchWordsThatFit(remainingText, wordsThatFit);

                if (wordsThatFitRemaining.Count > 0)
                {
                    recursiveWordsFit(wordsThatFitRemaining);
                }
                else
                {
                    if (remainingText == string.Empty)
                    {
                        string newAnagram = new string(anagram.OrderBy(f => f).Aggregate((i, j) => i + " " + j));
                        listAllAnagrams.Add(newAnagram);
                        anagram.Clear();
                        remainingText = sentence;
                    }
                    else
                    {
                        anagram.RemoveAt(anagram.Count - 1);
                        remainingText = remainingTextBefore;
                    }
                }
            }
        }
        public static List <string> GenerateAnagrams(string inputSentence)
        {
            listAllAnagrams.Clear();

            sentence      = Util.RemoveSpaceStringReader(inputSentence);
            remainingText = sentence;

            List <string> listValidWords = ReadFileTXT.ReadValidWordsFile();

            List <string> wordsThatFit = AnagramSolver.SearchWordsThatFit(sentence, listValidWords);

            recursiveWordsFit(wordsThatFit, true);

            return(listAllAnagrams.OrderBy(f => f).Distinct().ToList());
        }