public void addTransition( State source, String input, State destination ) throws TransitionInputConflictException, StateNotBelongsToFAException{
        if( source.fa.equals( this ) && destination.fa.equals( this ) ) { // If this DFA owns the source and destination
            if ( theTable.containsKey( input ) ) {
                if ( theTable.get( input ).containsKey( source ) ) { // If there is an entry with source and input string throw exception
                    throw new TransitionInputConflictException( "State has already transition with \"" + input + "\"" );
                } else {
                    theTable.get( input ).put( source, destination );
                }
            } else {
                addSecondaryKey( input, source, destination );
            }
            source.transitionSet.add( input );
        } else { // If this DFA does not owns the source or destination throw exception
            throw new StateNotBelongsToFAException( "source or destination state not belongs to this DFA." );
        }
    }