private void MenuItemAnalyzeSolve_Click(object sender, RoutedEventArgs e)
        {
            if (!applyNormal() && !applySukaku())
            {
                Messagings.FailedToApplyPuzzle();
                e.Handled = true;
                return;
            }

            bool applySukaku()
            {
                var sb = new StringBuilder(SudokuGrid.EmptyString);

                if (new SukakuBitwiseSolver().Solve(
                        _puzzle.ToString($"~{(Settings.TextFormatPlaceholdersAreZero ? "0" : ".")}"), sb, 2) != 1)
                {
                    return(!(e.Handled = true));
                }

                Puzzle = new UndoableGrid(SudokuGrid.Parse(sb.ToString()));
                UpdateImageGrid();
                return(true);
            }

            bool applyNormal()
            {
                var sb = new StringBuilder(SudokuGrid.EmptyString);

                for (int cell = 0; cell < 81; cell++)
                {
                    sb[cell] += (char)(_puzzle[cell] + 1);
                }

                if (new BitwiseSolver().Solve(sb.ToString(), sb, 2) != 1)
                {
                    return(!(e.Handled = true));
                }

                Puzzle = new UndoableGrid(SudokuGrid.Parse(sb.ToString()));
                UpdateImageGrid();
                return(true);
            }
        }
        private void MenuItemEditPasteAsSukaku_Click(object sender, RoutedEventArgs e)
        {
            string puzzleStr = Clipboard.GetText();

            if (!(puzzleStr is null))
            {
                try
                {
                    Puzzle = new UndoableGrid(SudokuGrid.Parse(puzzleStr, GridParsingOption.Sukaku));

                    _menuItemEditUndo.IsEnabled = _menuItemEditRedo.IsEnabled = false;
                    UpdateImageGrid();
                }
                catch (ArgumentException)
                {
                    Messagings.FailedToPasteText();
                }

                _listBoxPaths.ClearValue(ItemsControl.ItemsSourceProperty);
                _listViewSummary.ClearValue(ItemsControl.ItemsSourceProperty);
                _listBoxTechniques.ClearValue(ItemsControl.ItemsSourceProperty);
            }
        }