void update( Node start, int graphOffset, BitSet matchVersions, 
		int dataOffset, int length, int distance )
	{
		if ( transposed && transposeLeft )
			distance -= length;
		/*if ( !transposed || withinThreshold(distance,dataOffset,length) )
		{*/
			// select first version of match
			BitSet bs = new BitSet();
			bs.or( matchVersions );
			// adjust if alignment is direct
			if ( !transposed )
				bs.and( graph.constraint );
			short v = (short)bs.nextSetBit(0);
			assert v != -1;
			Match m = new Match( start, graphOffset, v, dataOffset, 
				length, arc.data );
			Match q = table.get( m );
			if ( q != null )
			{
				if ( !m.overlaps(q) )
					q.freq++;
				// else it is the same data sharing part of the same 
				// path, so it is really the same match
			}
			else
				table.put( m, m );
		/*}*/
	}