private SudokuSolver GuessFork() { Point position = GetSmallestOptionPosition(); if (position.X < 0 || position.Y < 0) { return(null); } foreach (var opt in Data[position.X, position.Y].Notes) { SudokuSolver fork = SudokuSolver.Clone(this); // Set the guess fork.Data[position.X, position.Y].Value = opt; // Try to solve if (fork.Solve(true)) { return(fork); } } return(null); }