code: public int minDepth()
      {
          Map<DFAState<T>,Integer> indexOf = new NumMap<>();
          Map<DFAState<T>,Integer> skip = new NumMap<>();
          Deque<DFAState<T>> stack = new ArrayDeque<>();
          DFAState<T> first = root;
          return minDepth(first, indexOf, stack, 0);
      }
docs: Calculates the minimum length of accepted string.  For "if|while"
  returns 2. For "a*" returns 0.
  @return