         (= D E*) nil
         :else (recur (walk ds E j i))))))
 
-(defn boundary-chambers [ds D i j k]
-  (iterate-cycle [#(walk ds %1 i) #(chain-end ds %1 j k)] D))
-
-(defn traversal [ds indices seeds]
+(defn pretty-traversal [ds indices seeds]
   (let [stacks (map #(vector % ()) (take 2 indices))
         queues (map #(vector % empty-queue) (drop 2 indices))
         as-root #(vector % :root)


(defn orbit-reps
  ([ds indices seeds]
    (for [[D i] (traversal ds indices seeds) :when (= :root i)] D))
  ([ds indices]
    (orbit-reps ds indices (iterator-seq (.elements ds)))))

(defn orbit-loopless? [ds indices D]
  (empty? (for [[D i] (traversal ds indices [D])
                :when (and (not= i :root) (or (nil? D) (= D (walk ds D i))))]
            D)))



(def octagon
  (DSymbol. "1.1:16 1:2 4 6 8 10 12 14 16,16 3 5 7 9 11 13 15:8"))

(defn boundary-chambers [ds D i j k]
  (iterate-cycle [#(walk ds %1 i) #(chain-end ds %1 j k)] D))

(def boundary-mappings
  (let [template-boundary (boundary-chambers template (Integer. 1) 0 1 2)
