protected override bool SolveIt(SolutionManager solutionManager, int size)
 {
     foreach (var vSol in (from vec in solutionManager.Sudoku.Vectors
                           from vSet in vec.GetSubSets(size, c => Enumerable.Range(2, size - 1).Contains(c.MyValue.OpenCandidates.Count()))
                           let vValues = vSet.SelectMany(c => c.MyValue.OpenCandidates).Select(cc => cc.Value).Distinct().ToList()
                                         where vValues.Count() == size
                                         let vLstCellsValues = (from vValue in vValues
                                                                let vLstCells = vec.FindAll(c => !vSet.Contains(c) && c.MyValue.OpenCandidates.Any(cc => cc.Value == vValue))
                                                                                where vLstCells.Count() > 0
                                                                                select new SolutionValueElement(vValue, vLstCells))
                                                               where vLstCellsValues.Count() > 0
                                                               select new SolutionSet(Step, new SolutionValue(ValueState.Removal, vLstCellsValues), new Set(vSet.ToList(), vValues))))
     {
         if (solutionManager.Execute(vSol))
         {
             return(true);
         }
     }
     return(false);
 }