queens <- function(n) {
  a <- seq(n)
  u <- rep(T, 2 * n - 1)
  v <- rep(T, 2 * n - 1)
  m <- NULL
  aux <- function(i) {
    if (i > n) {
      m <<- cbind(m, a)
    } else {
      for (j in seq(i, n)) {
        k <- a[[j]]
        p <- i - k + n
        q <- i + k - 1
        if (u[[p]] && v[[q]]) {
          u[[p]] <<- v[[q]] <<- F
          a[[j]] <<- a[[i]]
          a[[i]] <<- k
          aux(i + 1)
          u[[p]] <<- v[[q]] <<- T
          a[[i]] <<- a[[j]]
          a[[j]] <<- k
        }
      }
    }
  }
  aux(1)
  m
}