    canMakeNoRecursion <- function(x) {
      x <- toupper(x)
      charList <- strsplit(x, character(0))
      getCombos <- function(chars) {
        charBlocks <-  data.matrix(expand.grid(lapply(chars, function(char) which(blocks == char, arr.ind=TRUE)[, 1L])))
        charBlocks <- charBlocks[!apply(charBlocks, 1, function(row) any(duplicated(row))), , drop=FALSE]
        if (dim(charBlocks)[1L] > 0L) {
          t(apply(charBlocks, 1, function(row) apply(blocks[row, , drop=FALSE], 1, paste, collapse="")))
        } else {
          character(0)
        }
      }
      setNames(lapply(charList, getCombos), x)
    }
    canMakeNoRecursion(c("A",
               "BARK",
               "BOOK",
               "TREAT",
               "COMMON",
               "SQUAD",
               "CONFUSE"))