private static void PrintSolution(Position node)
        {
            Console.Write("Positions: ");
            while (node.row >= 0)
            {
                Console.Write("" + (char)('a' + node.row) + node.line + " ");
                node = node.parent;
            }

            Console.WriteLine();
        }
        public void WalkThroughTree()
        {
            if (this.line == NumberOfQueens)
            {
                PrintSolution(this);
                return;
            }

            for (var r = 0; r < NumberOfQueens; r++)
            {
                queenAbove = this;
                while (queenAbove.row >= 0 && r != queenAbove.row
                        && r - queenAbove.row != this.line + 1 - queenAbove.line
                        && queenAbove.row - r != this.line + 1 - queenAbove.line)
                {
                    queenAbove = queenAbove.parent;
                }

                if (queenAbove.line == 0)
                {
                    new Position(this.line + 1, r, this).WalkThroughTree();
                }
            }
        }
 public Position(int line, int row, Position parent)
 {
     this.line = line;
     this.row = row;
     this.parent = parent;
 }