combine(This,That) :-
	sort(This,[H|T]),
	combine1(T,H,[],That).

combine1([],H=A,Accum0,[H=Accum]) :-
	oset_union(Accum0,A,Accum).
combine1([H=B|T],H=A,Accum0,Out) :- !,
	oset_union(Accum0,A,Accum),
	combine1(T,H=B,Accum,Out).
combine1([H2=B|T0],H1=A,Accum0,[H1=Accum|T]) :-
	oset_union(Accum0,A,Accum),
	combine1(T0,H2=B,[],T).

