public void addTransition( State source, String input, State destination ) throws StateNotBelongsToFAException {
        if( source.fa.equals( this ) && destination.fa.equals( this ) ) { // If this NFA owns the source and destination
            if ( theTable.containsKey( input ) ) {
                if ( theTable.get( input ).containsKey( source ) ) {
                    theTable.get( input ).get( source ).add( destination );
                } else {
                    HashSet<State> tempSet = new HashSet<State>();
                    tempSet.add( destination );
                    theTable.get( input ).put( source, tempSet );
                }
            } else {
                HashSet<State> tempSet = new HashSet<State>();
                tempSet.add( destination );
                addSecondaryKey( input, source, tempSet );
            }
            source.transitionSet.add( input );
        } else { // If this NFA does not owns the source or destination throw exception
            throw new StateNotBelongsToFAException( "source or destination state not blongs to this NFA." );
        }
    }