protected void updateArc()
	{
		// arc was fully matched - save it
		addToPath( arc );
		boolean extended = false;
		ListIterator<Arc> iter = arc.to.outgoingArcs();
		while ( iter.hasNext() )
		{
			Arc a = iter.next();
			if ( a.versions.intersects(versions)
				&&a.versions.nextSetBit(mum.version)!=mum.version
				&&(!a.isParent()||!a.hasChildInVersion(mum.version)) )
			{
				this.arc = a;
				this.first = 0;
				MatchThreadTransposeRight mttr = new MatchThreadTransposeRight( this );
				mttr.run();
				extended |= mttr.first > 0;
			}
		}
		if ( !extended )
			mismatch();
	}