anchor.diff:  
       (return-from procura-retrocesso-fc-mrv-fapix (values nil testes-totais))))
   
  +(defun procura-retrocesso-mac-mrv-fapix (f)
  +  ""
  +;  (format t "pr-mac-mrv~%")
  +  (let ((testes-totais 0))
  +    (when (fapix-completo-p f)
  +      (return-from procura-retrocesso-mac-mrv-fapix (values f testes-totais)))
  +
  +    (let* ((ipix (fapix-mrv f))
  +	   (d (fapix-pix-dominio f ipix))
  +	   )
  +      (format t "Vou experimentar a variavel:~a cujo dominio e:~a~%" ipix (fapix-pix-dominio f ipix))
  +      ; TODO: heuristica de valor (media dos pixs a volta? implica mais um array)
  +      (when (= (length d) 2)
  +	(let* ((a-volta (aref (fapix-a-volta f) ipix))
  +	       (a-volta-len (length a-volta))
  +	       (soma 0)
  +	       (numero 0))
  +
  +	  (dolist (ipix-av a-volta)
  +	    (let ((pix (aref (fapix-pix f) ipix-av)))
  +	      (when pix (incf soma pix) (incf numero))))
  +
  +	  (when (and (not (= numero 0)) (= (round (round soma numero) a-volta-len) 1))
  +	    (setf d (reverse d)))))
  +
  +      (dolist (cor d)
  +	(multiple-value-bind (consistente testes) (fapix-atribuicao-consistente-p f ipix cor)
  +	  (incf testes-totais testes)
  +	  (when consistente
  +	    (format t "Atribuindo o valor:~a a variavel:~a~%" cor ipix)
  +	    (fapix-adiciona-atribuicao! f ipix cor)
  +	    (setf (fapix-natribuidos f) (remove ipix (fapix-natribuidos f)))
  +;	    (format t "natribuidos:~a~%" (fapix-natribuidos f))
  +	    (setf (aref (fapix-dominio-len f) (length d))
  +		  (remove ipix (aref (fapix-dominio-len f) (length d))))
  +;	    (format t "dominio-len:~a~%" (fapix-dominio-len f))
  +;	    (format t "Depois da atribuicao~%")
  +	    (desenha-fill-a-pix (fapix->fill-a-pix f))
  +	    (multiple-value-bind (inferencias testes) (fapix-mac f ipix)
  +	      (format t "PR: inferencias:~a~%" inferencias)
  +	      (incf testes-totais testes)
  +	      (when inferencias ; teste suficiente?
  +		(let ((backup (make-hash-table :test 'eql)))
  +		  (maphash #'(lambda (iipix id)
  +;			       (format t "iipix:~a id:~a~%" iipix id)
  +			       (setf (gethash iipix backup) (fapix-pix-dominio f iipix))
  +			       (fapix-altera-dominio! f iipix id))
  +			   inferencias)
  +
  +;		  (format t "Depois das inferencias~%")
  +;		  (desenha-fill-a-pix (fapix->fill-a-pix f))
  +
  +		  (multiple-value-bind (resultado testes) (procura-retrocesso-mac-mrv-fapix f)
  +		    (incf testes-totais testes)
  +		    (when resultado
  +		      (return-from procura-retrocesso-mac-mrv-fapix (values resultado testes-totais))))
  +
  +		  (maphash #'(lambda (bipix bd)
  +			       (fapix-altera-dominio! f bipix bd))
  +			   backup)
  +
  +;		  (print "Removidas as inferencias:")
  +;		  (desenha-fill-a-pix (fapix->fill-a-pix f))
  +		  ))
  +
  +	      (fapix-remove-atribuicao! f ipix)
  +	      (push ipix (fapix-natribuidos f))
  +;;	      (push ipix (aref (fapix-dominio-len f) (length d)))
  +	      (nconc (aref (fapix-dominio-len f) (length d)) (list ipix)) ; TODO:
  +
  +	      (print "Removendo a atribuicao:")
  +	      (desenha-fill-a-pix (fapix->fill-a-pix f))
  +	      )))))
  +
  +    (return-from procura-retrocesso-mac-mrv-fapix (values nil testes-totais))))
   
   (defun fapix-forward-checking (f ipix)
     ""
  
positive.code:       (setf (gethash x inferencias) novo-dominio-x)) ; TODO: sobrepor?
  
      (values revised testes-totais)))
  
negative.code: 
  	    (setf (aref pix-a-volta ipix) a-volta)
  	    (push ipix pix-natribuidos)
  
  	    (when (numberp pix)
  	      (when (> pix a-volta-len) (setf pix-solucionavel nil) (return-from ciclos))
  
  	      (setf (aref pix-pix ipix) pix)
  	      (let* ((restricao (cria-restricao-fapix a-volta pix a-volta-len))
  		     (dominio (if (= pix 0) (list 0) (if (= pix a-volta-len) (list 1) nil))))
  
  