public FSMNet <TInput, TOutput> Solve()
        {
            if (FSM == null)
            {
                throw new NullReferenceException();
            }

            FSMNet <TInput, TOutput> result = null;

            try
            {
                RefreshWorkSets();

                result = new FSMNet <TInput, TOutput>(FSM);
                result.DecomposeAlg = this;

                foreach (var pi in PIs)
                {
                    result.AddToEnd(new FSMNet <TInput, TOutput> .NetComponent(new ComponentFSM <TInput, TOutput>(this, pi.Value, FSM.InitialState, pi.Key))
                    {
                    });
                }
            }
            catch (Exception exc)
            {
                EPSs.Clear();
                TAUs.Clear();
                Ns.Clear();
                TTs.Clear();
                throw exc;
            }
            if (result != null)
            {
                result.FSM.CalcIsProbabilityMachine();
            }
            return(result);
        }