public void addTransition(Transition transition) {
   if (!transitions.isEmpty()
       && !transition.getS().equals(transitions.get(transitions.size() - 1).getsPrime())) {
     throw new RuntimeException(
         "Cannot add transition. Initial state is not the same as final state of previous transition");
   }
   if (allStates.isEmpty()) {
     allStates.add(transition.getS());
   }
   transitions.add(transition);
   allStates.add(transition.getsPrime());
 }
 @Override
 public String toString() {
   StringBuilder sb = new StringBuilder();
   for (int i = 0; i < transitions.size(); i++) {
     Transition t = transitions.get(i);
     if (i == 0) {
       sb.append(t.getS());
     }
     sb.append("->");
     sb.append(t.getsPrime());
   }
   return sb.toString();
 }
 public void initAllStates() {
   for (Transition transition : transitions) {
     allStates.add(transition.getS());
   }
   allStates.add(transitions.get(transitions.size() - 1).getsPrime());
 }