code: private State<O> updateSignature(State<O> state, int idx, State<O> succ) {
          StateSignature<O> sig = state.getSignature();
          if (sig.successors.array[idx] == succ) {
              return state;
          }
  
          register.remove(sig);
          if (sig.successors.array[idx] != null) {
              sig.successors.array[idx].decreaseIncoming();
          }
          sig.successors.array[idx] = succ;
          succ.increaseIncoming();
          sig.updateHashCode();
          return replaceOrRegister(state);
      }
docs: Update the signature of a state, changing only the successor state of a single transition index.
  
  @param state
  the state which's signature to update
  @param idx
  the transition index to modify
  @param succ
  the new successor state
  
  @return the resulting state, which can either be the same as the input state (if the new signature is unique), or
  the result of merging with another state.