//--------------------------------------------------------------------------------------
 private bool ChaeckCurrentPart()
 {
     //DifferenceElement elementFromOrigine = _originePairwiseDifferences.FirstOrDefault(e => e.Data == _pairwiseDifferences[fCurrentSet[fCurrentPosition]] && !e.IsIncluded);
     //if (elementFromOrigine.Data == 0)
     //    throw new Exception("Logical error in EnumerateDNAMappingBranchBoundary.ChaeckCurrentPart (search current diff in _originePairwiseDifferences)");
     //elementFromOrigine.IsIncluded = true;
     for (int i = 0; i < _fCurrentPosition; i++)
     {
         int d = _pairwiseDifferences[_fCurrentSet[_fCurrentPosition]] - _pairwiseDifferences[_fCurrentSet[i]];
         DifferenceElement element = _originePairwiseDifferences.FirstOrDefault(e => e.Data == d && !e.IsIncluded);
         if (element == null)
         {
             for (int j = 0; j < i; j++)
             {
                 int revValue = _pairwiseDifferences[_fCurrentSet[_fCurrentPosition]] - _pairwiseDifferences[_fCurrentSet[j]];
                 DifferenceElement revElement = _originePairwiseDifferences.FirstOrDefault(e => e.Data == revValue && e.IsIncluded);
                 if (revElement == null)
                 {
                     throw new Exception("Logical error in EnumerateDNAMappingBranchBoundary.ChaeckCurrentPart (Restore state)");
                 }
                 revElement.IsIncluded = false;
             }
             StatisticAccumulator.ElemenationCountInc();
             return(false);
         }
         element.IsIncluded = true;
     }
     return(true);
 }
        //--------------------------------------------------------------------------------------
        protected override void RemoveAction(int p)
        {
            if (_fCurrentPosition == 0)
            {
                return;
            }
            if (_fCurrentSet[0] > 0)
            {
                return;
            }
            int d = _pairwiseDifferences[_fCurrentSet[_fCurrentPosition]];
            DifferenceElement element = _originePairwiseDifferences.FirstOrDefault(e => e.Data == d && e.IsIncluded);

            if (element == null)
            {
                return;
            }
            element.IsIncluded = false;
            for (int i = 1; i < _fCurrentPosition; i++)
            {
                d       = _pairwiseDifferences[_fCurrentSet[_fCurrentPosition]] - _pairwiseDifferences[_fCurrentSet[i]];
                element = _originePairwiseDifferences.FirstOrDefault(e => e.Data == d && e.IsIncluded);
                if (element == null)
                {
                    throw new Exception("Logical error in EnumerateDNAMappingBranchBoundary.BackAction");
                }
                element.IsIncluded = false;
            }
            //DifferenceElement elementFromOrigine = _originePairwiseDifferences.FirstOrDefault(e => e.Data == _pairwiseDifferences[fCurrentSet[fCurrentPosition]] && e.IsIncluded);
            //elementFromOrigine.IsIncluded = false;
        }