anchor.diff:  	(let* ((v (psr-var-maior-grau p))
   	       (d (psr-variavel-dominio p v)))
   
  -;	  (when DEBUG (format t "Escolhi a variavel:~a cujo dominio e:~a~%" v (psr-variavel-dominio p v)))
   	  (dolist (valor d)
   	    (multiple-value-bind (consistente testes) (psr-atribuicao-consistente-p p v valor)
   	      (incf testes-total testes)
  -;	      (when DEBUG (format t "Fiz ~a testes de consistencia. O total vai em:~a~%" testes testes-total))
   	      (when consistente
  -;		(when DEBUG (format t "Atribuindo o valor:~a a variavel:~a~%" valor v))
   		(psr-adiciona-atribuicao! p v valor)
  -
  -;		(when DEBUG
  -;		  (format DEBUG "Depois da atribuicao~%")
  -;		  (desenha-fill-a-pix (psr->fill-a-pix p LC LC)))
   
   		(multiple-value-bind (recurs-consistente recurs-testes) (procura-retrocesso-grau p)
   		  (incf testes-total recurs-testes)
  -;		  (when DEBUG
  -;		    (format t "Somando os ~a desta iteracao com os ~a que vem de tras fica:~a~%" testes recurs-testes testes-total))
  +
   		  (when (not (null recurs-consistente))
   		    (return-from procura-retrocesso-grau (values p testes-total))))
   
  -		(psr-remove-atribuicao! p v)
  -;		(when DEBUG
  -;		  (print "Removendo a atribuicao:")
  -;		  (desenha-fill-a-pix (psr->fill-a-pix p LC LC)))
  -		)))
  +		(psr-remove-atribuicao! p v))))
   	  (return-from procura-retrocesso-grau (values nil testes-total))))))
   
   
  
positive.code:   (let ((testes-totais 0))
      (when (psr-completo-p p) (return-from procura-retrocesso-fc-mrv (values p testes-totais)))
  
      (let* ((v (psr-mrv p))
  ;	   (d (psr-variavel-dominio p v))
  	   )
  ;      (when DEBUG (format t "Vou experimentar a variavel:~a cujo dominio e:~a~%" v (psr-variavel-dominio p v)))
        (dolist (valor (psr-variavel-dominio p v))
  	(multiple-value-bind (consistente testes) (psr-atribuicao-consistente-p p v valor)
  	  (incf testes-totais testes)
  	  (when consistente
  ;	    (when DEBUG (format t "Atribuindo o valor:~a a variavel:~a~%" valor v))
  	    (psr-adiciona-atribuicao! p v valor)
  
  ;	    (when DEBUG
  ;	      (format DEBUG "Depois da atribuicao~%")
  ;	      (desenha-fill-a-pix (psr->fill-a-pix p LC LC)))
  	    (multiple-value-bind (inferencias testes) (psr-forward-checking p v)
  ;	      (when DEBUG (format t "PR: inferencias:~a~%" inferencias))
  	      (incf testes-totais testes)
  	      (when inferencias ; teste suficiente?
  		(let ((backup (make-hash-table :test 'equal)))
  		  (maphash #'(lambda (iv id)
  ;			       (when DEBUG (format t "iv:~a id:~a~%" iv id))
  			       (setf (gethash iv backup) (psr-variavel-dominio p iv))
  			       (psr-altera-dominio! p iv id))
  			   inferencias)
  
  ;		  (when DEBUG
  ;		    (format DEBUG "Depois das inferencias~%")
  ;		    (desenha-fill-a-pix (psr->fill-a-pix p LC LC)))
  
  		  (multiple-value-bind (resultado testes) (procura-retrocesso-fc-mrv p)
  		    (incf testes-totais testes)
  
negative.code:   (let ((testes-totais 0))
      (when (psr-completo-p p) (return-from procura-retrocesso-mac-mrv (values p testes-totais)))
  
      (let* ((v (psr-mrv p)))
        (dolist (valor (psr-variavel-dominio p v))
  	(multiple-value-bind (consistente testes) (psr-atribuicao-consistente-p p v valor)
  	  (incf testes-totais testes)
  	  (when consistente
  	    (psr-adiciona-atribuicao! p v valor)
  
  	    (multiple-value-bind (inferencias testes) (psr-mac p v)
  	      (incf testes-totais testes)
  	      (when inferencias
  		(let ((backup (make-hash-table :test 'equal)))
  		  (maphash #'(lambda (iv id)
  			       (setf (gethash iv backup) (psr-variavel-dominio p iv))
  			       (psr-altera-dominio! p iv id))
  			   inferencias)
  
  		  (multiple-value-bind (resultado testes) (procura-retrocesso-mac-mrv p)
  		    (incf testes-totais testes)
  