Solution

0  0  0  0  0  0  0  1
0  1  0  0  0  0  0  0
0  0  0  1  0  0  0  0
1  0  0  0  0  0  0  0
0  0  0  0  0  0  1  0
0  0  0  0  1  0  0  0
0  0  1  0  0  0  0  0
0  0  0  0  0  1  0  0


Xpress-Mosel Model
model 'squeens'

! Description  : Schuh's queen placement problem
! Source       : Schuh, F., (1943), Wonderlijke Problemen; 
!                   Leerzam Tijdverdrijf Door Puzzle en Speel, W.J. Thieme & Cie, Zutphen.   
! Date written : Xpress-MP 26/10/99, Mosel 17/4/03
! Written by   : M J Chlond 

  uses 'mmxprs'
  
  parameters
    size = 8
  end-parameters
  
  declarations
    S = 1..size
    x: array(S,S) of mpvar ! x(i,j) = 1 if square {I,J} occupied, 0 otherwise
    a: array(S,S) of mpvar ! a(i,j) = 1 if square {I,J} attacked, 0 otherwise
  end-declarations

  ! maximise number of queens  
  numq:= sum(i in S,j in S) x(i,j)

  max8:= sum(i in S,j in S) x(i,j) <= 8  

  ! a(i,j) = 1 if square {i,j} attacked
  forall(i in S,j in S)
    att(i,j):= sum(m in S | m <> i and m-i+j >= 1 and m-i+j <= size) x(m,m-i+j)+
               sum(m in S | m <> i and i+j-m >= 1 and i+j-m <= size) x(m,i+j-m)+
               sum(m in S | m <> i) x(m,j) + sum(n in S | n <> j) x(i,n) <= 99*a(i,j) 

  ! each square either attacked or occupied
  forall(i in S,j in S)
    mb(i,j):= a(i,j)+x(i,j) = 1

  forall(i in S, j in S) do
    x(i,j) is_binary
    a(i,j) is_binary
  end-do

  maximise(numq)
  
  forall(i in S) do
    forall(j in S)
      write(getsol(x(i,j)),' ')
    writeln
  end-do

end-model