                        0
                        (last p))
                      (first p)))
-                 "" pos-line))
-      )
-    ))
+                 "" (sort-by last pos-line))))))
 
-(draw-ascii (compute-coordinates
-              #{1 2 3 4 5} (non-strict #(or (= 1 %1) (= 5 %2)))))
-
-(draw-ascii (compute-coordinates
-              #{1 2 3 4 5} (non-strict #(or (= 1 %1) (= 5 %2) (and (= %1 2) (= %2 3))))))
+;(draw-ascii (compute-coordinates
+;              #{1 2 3 4 5} (non-strict #(or (= 1 %1) (= 5 %2)))))
+;
+;(draw-ascii (compute-coordinates
+;              #{1 2 3 4 5} (non-strict #(or (= 1 %1) (= 5 %2) (and (= %1 2) (= %2 3))))))
 
 
-
-nil+nil

         [[(! (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.

   (first (drop-while #(= % nil) (map #(sat-reduction g %) (range)))))
  ([g k]
   (let [node-clauses (mapcat
                        #(vec [[[% 1] [% 2] [% 3]]])        ; alt least one of V_{i,1}, V_{i,2}, or V_{i,3} is true
                        (nodes g))
         edge-clauses (mapcat
                        #(let [vi (:src %) vj (:dest %)]
                           [[(! [vi 1]) (! [vj 1])]
