(defun word-possible-p (word blocks)
  (cond 
    ((= (length word) 0) t)
    ((null blocks) nil)
    (t (let* 
         ((c (aref word 0))
          (bs (remove-if-not #'(lambda (b) 
                                 (find c b :test #'char-equal))
                             blocks)))
         (some #'identity 
               (loop for b in bs
                     collect (word-possible-p
                               (subseq word 1)
                               (remove b blocks))))))))