global n, rw, dd, ud procedure main(args) n := integer(args[1]) | 8 rw := list(n) dd := list(2*n-1) ud := list(2*n-1) solvequeen(1) end procedure solvequeen(c) if (c > n) then return show() else suspend placequeen(c) & solvequeen(c+1) end procedure placequeen(c) suspend (/rw[r := 1 to n] <- /dd[r+c-1] <- /ud[n+r-c] <- c) end procedure show() static count, line, border initial { count := 0 line := repl("| ",n) || "|" border := repl("----",n) || "-" } write("solution: ", count+:=1) write(" ", border) every line[4*(!rw - 1) + 3] <- "Q" do { write(" ", line) write(" ", border) } write() return # Comment out to see all possible solutions end