param N; # N x N chessboard var x {1..N, 1..N} binary; maximize number_queens: sum{i in 1..N,j in 1..N} x[i,j]; subject to col_const {i in 1..N}: sum{j in 1..N} x[i,j] <=1; subject to row_const {j in 1..N}: sum{i in 1..N} x[i,j] <=1; subject to NWSE_upperdiag {i in 1..N}: sum{k in i..N} x[k,k+1-i] <=1; subject to NWSE_lowerdiag {j in 1..N}: sum{k in 1..N+1-j} x[k,j+k-1]<=1; subject to SWNE_upperdiag {i in 1..N-1}: sum{k in 1..i} x[k,i+1-k] <=1; subject to SWNE_lowerdiag {j in 1..N-1}: sum{k in j..N} x[k,N+j-k] <=1;