private void transposeMerge() throws MVDException
	{
		// attach leftSubArc if any
		Node arcFrom = arc.from;
		//System.out.println(arc.toString());
		arc.from.removeOutgoing( arc );
		if ( leftSubArc != null )
		{
			arcFrom.addOutgoing( leftSubArc );
			arcFrom = new Node();
			arcFrom.addIncoming( leftSubArc );
		}
		// attach rightSubArc if any
		Node arcTo = arc.to;
		arc.to.removeIncoming( arc );
		if ( rightSubArc != null )
		{
			arcTo.addIncoming( rightSubArc );
			arcTo = new Node();
			arcTo.addOutgoing( rightSubArc );
		}
		// now for the bit in the middle
		Arc[] parents = match.getMatchPath();
		for ( int i=0;i<parents.length;i++ )
		{
			BitSet versions = new BitSet();
			versions.set( version );
			Arc child = new Arc( versions, parents[i] );
			arcFrom.addOutgoing( child );
			if ( parents[i].versions.nextSetBit(version)==version )
				System.out.println("Ooops!");
			if ( i < parents.length-1 )
			{
				arcFrom = new Node();
				arcFrom.addIncoming( child );
			}
			else
				arcTo.addIncoming( child );
		}
		//graph.verify();
	}