                                  "full" :full ;; full, random graph: for testing etc.
                                  "random" :random ;; full, random: takes num of vertices as argument
                                  "help" :help
-                                 "version" :version
-                                 }
+                                 "version" :version}
                         :shorts{\b "bidirectional"
                                 \d "directed"
                                 \p "pairs"


        print-cut? (opt :cut)
        print-cut? (if (opt :cut-edn) :edn print-cut?)
        print-cut? (if (opt :cut-all) :all print-cut?)
        ]
    (cond
     (opt :version) (println (get-version))
     (opt :help) (prn-help)
     (opt :full) (->> (read-string (opt :full)) full-graph (compute-print print-cut?))
     (opt :random) (->> (read-string (opt :random)) rand-graph (compute-print print-cut?))
     :else (->> (graph-reader) (apply graph-builder) (compute-print print-cut?))
     )))

(defn -main [& args]
  (args-dispatch args)

(defn read-all
  ([] (read-all *in*))
  ([input]
   (let [eof (Object.)]
     (take-while #(not= % eof) (repeatedly #(edn/read {:eof eof} input))))))


(defn read-pairs [] (read-all))
