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

                                          :path-prefix               (:expound/path (first grp))
                                          :problems                  grp}
                                         {:expound.spec.problem/type :expound.problem-group/one-value
                                          :path-prefix               (apply lcs1 (map :expound/path grp))
                                          :problems                  grp}))))]
    (->> grouped-by-in-path
         (reduce

    :else
    :expound.problem/unknown))

(defn ^:private lcs* [[x & xs] [y & ys]]
  (cond
    (or (= x nil) (= y nil)) nil
    (= x y) (vec (cons x (lcs* xs ys)))
    :else []))

(defn ^:private lcs [& paths]
  (reduce
   (fn [xs ys]
     (lcs* xs ys))
   paths))

(defn ^:private alternation [grp1 grp2]
  (let [xs (:path-prefix grp1)
        ys (:path-prefix grp2)
        prefix (lcs xs ys)]
    (if (and
         (not (empty? prefix))
         (some? prefix)
