code: private Collection<State> updateStateListForChar(Iterable<State> states, int index) {
      Collection<State> result = new LinkedList<>();
      for (State state : states) {
        updateStateForChar(state, index, result);
      }
      return simplifyStates(result);
    }
docs: non-optimal states.