   (let [<=as-set (map edge->vec (lg/edges (make-digraph-from-condition P <=)))
         <=C
         (let [<=C' (compute-conjugate-order P <=)]
+          (println "<=C': " <=C')
           (if (= <=C' nil)
             (let [I (incompatibility-graph P <=)
-                  C (sat-reduction I)]
-              (compute-conjugate-order P (union <= (transitive-closure C))))
+                  C (sat-reduction I)
+                  C-bar-graph (transitive-closure (apply uber/digraph C))]
+              (uber/pprint I)
+              (println C-bar-graph)
+              (compute-conjugate-order P #(or (<= %1 %2) (lg/has-edge? C-bar-graph %1 %2)))
+              )
             <=C'))
         <=1 (union <=as-set <=C)
         <=2 (union <=as-set (map reverse <=C))

         [[(! (xs (- n 1))) (! [:tmp s (- n 2) (- k 1)])]]))
     (vec (map #(vec [(! %)]) xs)))))

(def cnf (lt-seq [:x1 :x2 :x3] 0 "s"))
(println cnf)
(println)
(doseq [line (sat/solutions-symbolic-cnf cnf)]
  (println line))

(defn sat-reduction
  "Reduces the problem of finding a maximum bipartite subgraph to satisfiability.

     ;(println C)
     C)))

;(sat-reduction (uber/graph [:a :b] [:a :c] [:b :e] [:c :e] [:a :e]) 1)

(defn compute-conjugate-order
  [P <=]
