
# Print all solutions to 8-queens problem.  Public domain, Connelly Barnes 2006.

def permutations(L):
  if len(L) <= 1:
    yield list(L)
  else:
    for i in range(len(L)):
      for p in permutations(L[:i]+L[i+1:]):
        yield [L[i]] + p

def queens(n):
  for L in permutations(range(n)):
    if (len(set(i+L[i] for i in range(n))) == n and   # Main diagonals
        len(set(i-L[i] for i in range(n))) == n):     # Skew diagonals
      yield L

if __name__ == '__main__':
  for sol in queens(8):
    for col in sol:
      print '.'*col + 'Q' + '.'*(8-1-col)
    print
