        form))
    groups))
 
-;; TODO - private
-(defn remove-vec [v x]
+(defn ^:private remove-vec [v x]
   (vec (remove #{x} v)))
 
 (defn ^:private groups [problems]

    (= x y) (vec (cons x (lcs xs ys)))
    :else []))

(defn ^:private lcs1 [& paths]
  (reduce
   (fn [xs ys]

(defn ^:private alt-group [grp1 grp2]
  {:expound.spec.problem/type :expound.problem/alt-group
   :path-prefix               (lcs1 (:path-prefix grp1)
                                    (:path-prefix grp2))
   :problems                  (into
                               (if (= :expound.problem/alt-group (:expound.spec.problem/type grp1))
                                 (:problems grp1)
                                 [grp1])

                               (if (= :expound.problem/alt-group (:expound.spec.problem/type grp2))
                                 (:problems grp2)
                                 [grp2]))})

(defn ^:private lift-singleton-groups [groups]
  (walk/postwalk
