in Sudoku/Cell.cs [35:47]
public int PopNextNumber()
{
if (IsFilled) throw new InvalidOperationException();
var options = _options;
var number = Enumerable.Range(1, 9).FirstOrDefault(_ => options.Contains(_));
// number == NumberEx.Unknown means we tried all numbers and all branches finished by dead end
if (number != NumberEx.Unknown)
RemoveOption(number);
return number;
}