code: public static <S, I, O> LYResult<S, I, O> compute(final MealyMachine<S, I, ?, O> automaton,
                                                        final Alphabet<I> input) {
  
          final SplitTreeResult<S, I, O> str = computeSplitTree(automaton, input);
  
          if (str.isPresent()) {
              final Set<S> states = new HashSet<>(automaton.getStates());
              return new LYResult<>(extractADS(automaton,
                                               str.get(),
                                               states,
                                               states.stream()
                                                     .collect(Collectors.toMap(Function.identity(), Function.identity())),
                                               null));
          }
  
          return new LYResult<>(str.getIndistinguishableStates());
      }
docs: Computes an ADS using the algorithm of Lee and Yannakakis.
  
  @param automaton
  The automaton for which an ADS should be computed
  @param input
  the input alphabet of the automaton
  @param <S>
  (hypothesis) state type
  @param <I>
  input alphabet type
  @param <O>
  output alphabet type
  
  @return A {@link LYResult} containing an adaptive distinguishing sequence (if existent) and a possible set of
  indistinguishable states.