public static IList <IList <string> > SolveNQueens(int n)
        {
            var output = new List <IList <string> >();
            var q      = new QueenBoard(n);

            SolveNQueenHelper(q, 0, output);
            return(output);
        }
        public static void SolveNQueenHelper(QueenBoard board, int row, IList <IList <string> > solutions)
        {
            if (row == board.Size)
            {
                solutions.Add(board.ToStringList());
                return;
            }

            for (var col = 0; col < board.Size; col++)
            {
                var successfulPlacement = board.TryPlaceQueen(row, col);
                if (successfulPlacement)
                {
                    SolveNQueenHelper(board, row + 1, solutions);
                    board.RemoveQueen(row, col);
                }
            }
        }