procedure main() write(q(1), " ", q(2), " ", q(3), " ", q(4), " ", q(5), " ", q(6), " ", q(7), " ", q(8)) end procedure q(c) static udiag, ddiag, row initial { udiag := list(15, 0) ddiag := list(15, 0) row := list(8, 0) } every 0 = row[r := 1 to 8] = ddiag[r + c - 1] = udiag[8 + r - c] do # test if free suspend row[r] <- ddiag[r + c - 1] <- udiag[8 + r - c] <- r # place and yield end