Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

8 Queens Problem

The goal of 8 Queens Problem is to put eight queens on a chess-board such that none of them threatens any of others. A queen threatens the squares in the same row, in the same column, or on the same diagonals as shown in the following figure.

For a given chess board where $k$ queens are already placed, find the solution of the 8 queens problem.

Input

In the first line, an integer $k$ is given. In the following $k$ lines, each square where a queen is already placed is given by two integers $r$ and $c$. $r$ and $c$ respectively denotes the row number and the column number. The row/column numbers start with 0.

Output

Print a $8 \times 8$ chess board by strings where a square with a queen is represented by 'Q' and an empty square is represented by '.'.

Constraints

There is exactly one solution

Sample Input 1

2
2 2
5 3

Sample Output 1

......Q.
Q.......
..Q.....
.......Q
.....Q..
...Q....
.Q......
....Q...

Solution in Ruby (judge verdict: Accepted)

class EightQueen
  SUCCESS = 0
  FAIL = 1
  FREE = 0
  NOT_FREE = 1
  N=8
 
  def initialize
    @row = []
    @col = Array.new(N, FREE)
    @down = Array.new(2*N-1, FREE) # x - y + (N - 1)
    @up = Array.new(2*N-1, FREE)   # x + y
    @x = Array.new(8).map { Array.new(8, false) }
 
    gets.to_i.times do
      i, j = gets.split.map &:to_i
      @x[i][j] = true
    end
  end
 
  def print_queen
    (0...N).each do |i|
      (0...N).each do |j|
        if @x[i][j] && @row[i] != j
          return FAIL
        end
      end
    end
 
    (0...N).each do |i|
      (0...N).each do |j|
        print @row[i] == j ? 'Q' : '.'
      end
      puts
    end
    return SUCCESS
  end
 
  def solve(i)
    (0..7).each do |j|
      if @col[j] == FREE && @down[i-j+(N-1)] == FREE && @up[i+j] == FREE
        @row[i] = j
        @col[j] = @down[i-j+(N-1)] = @up[i+j] = NOT_FREE
 
        if (i == 7)
          return if print_queen == SUCCESS
        else
          solve(i + 1)
        end
        @row[i] = nil
        @col[j] = @down[i-j+(N-1)] = @up[i+j] = FREE
      end
    end
  end
end
 
eq = EightQueen.new
eq.solve(0)