private IEnumerable <CoreDefinitions.IOptionalAutomaton> GetAllFullAutomataToCheckRecursively(int size, int index)
        {
            byte[] MemoryB   = new byte[size], memoryHelp;
            int    maxLength = (size - 1) * (size - 1);

            List <byte>[] TransitionsFromA = new List <byte> [size];
            List <byte>[] helpList         = new List <byte> [size];
            for (byte i = 0; i < size; i++)
            {
                TransitionsFromA[i] = new List <byte>();
            }

            foreach (var AcAutomaton in solutionMapper2.SelectAsSolved(GetAllAcAutomataToCheck(size, index)))
            {
                if (AcAutomaton.SynchronizingWordLength == null || (AcAutomaton.SynchronizingWordLength * 2) + 1 > maxLength)
                {
                    Array.Copy(AcAutomaton.TransitionFunctionsB, MemoryB, AcAutomaton.TransitionFunctionsB.Length);
                    MakingFullAutomata makingFullAutomata = new MakingFullAutomata(AcAutomaton, TransitionsFromA, helpList);
                    foreach (var fullAutomaton in makingFullAutomata.Generate())
                    {
                        yield return(fullAutomaton);
                    }

                    memoryHelp = AcAutomaton.TransitionFunctionsB;
                    AcAutomaton.TransitionFunctionsB = MemoryB;
                    MemoryB = memoryHelp;
                }
            }
        }
 public IEnumerable <CoreDefinitions.ISolvedOptionalAutomaton> GetAllSolved(int size, int index)
 => solutionMapper1.SelectAsSolved(GetAllFullAutomataToCheckRecursively(size, index));