
import pprint as pp


def isSol(board):
    for row in range(8):
        # Find the queen on row "row"
        for col in range(8):
            if (board[row][col] == 1):
                break;

        # ===============================
	# Queen found in (row, col)
        # ===============================

        # Make sure at most 1 queen in row "row"
        nQueens = 0
        for j in range(8):
            nQueens += board[row][j]
        if ( nQueens > 1 ):
            return False

        # Make sure at most 1 queen in column "col"
        nQueens = 0
        for j in range(8):
            nQueens += board[j][col]
        if ( nQueens > 1 ):
            return False

        # Make sure at most 1 queen in diagonal: \
        nQueens = 0
        for j in range(-8, 8):
            if ( 0 <= row+j and row+j <= 7 and
                 0 <= col+j and col+j <= 7      ):
                nQueens += board[row+j][col+j]
        if ( nQueens > 1 ):
            return False

        # Make sure at most 1 queen in diagonal: /
        nQueens = 0
        for j in range(-8, 8):
            if ( 0 <= row-j and row-j <= 7 and
                 0 <= col+j and col+j <= 7      ):
                nQueens += board[row-j][col+j]
        if ( nQueens > 1 ):
            return False

    return True



board = [ [0, 0, 1, 0, 0, 0, 0, 0],
          [0, 0, 0, 0, 0, 1, 0, 0],
	  [0, 0, 0, 0, 0, 0, 0, 1],
	  [1, 0, 0, 0, 0, 0, 0, 0],
	  [0, 0, 0, 1, 0, 0, 0, 0],
	  [0, 0, 0, 0, 0, 0, 1, 0],
	  [0, 0, 0, 0, 1, 0, 0, 0],
	  [0, 1, 0, 0, 0, 0, 0, 0]
        ]


#-----------------
# Test isSol()
#-----------------
#pp.pp(board)
#print( isSol(board) )
#exit()

nSols = 0

for r0 in range(8):
 for r1 in range(8):
  for r2 in range(8):
   for r3 in range(8):
    for r4 in range(8):
     for r5 in range(8):
      for r6 in range(8):
       for r7 in range(8):
        board = [ [0, 0, 0, 0, 0, 0, 0, 0],
                  [0, 0, 0, 0, 0, 0, 0, 0],
                  [0, 0, 0, 0, 0, 0, 0, 0],
                  [0, 0, 0, 0, 0, 0, 0, 0],
                  [0, 0, 0, 0, 0, 0, 0, 0],
                  [0, 0, 0, 0, 0, 0, 0, 0],
                  [0, 0, 0, 0, 0, 0, 0, 0],
                  [0, 0, 0, 0, 0, 0, 0, 0]
                ]
        board[0][r0] = 1
        board[1][r1] = 1
        board[2][r2] = 1
        board[3][r3] = 1
        board[4][r4] = 1
        board[5][r5] = 1
        board[6][r6] = 1
        board[7][r7] = 1
        if ( isSol(board) ):
           pp.pp(board)
           nSols += 1
           print(nSols)

print("# solutions = ", nSols)
