:- lib(ordsets).		% ord_add_element/2.
:- lib(lists).          % is_list/1.

:- lib(ord_add_list/3).

kv_to_ord_k_v( KVList, OrdKs, OrdVs ) :-
	kv_to_ord_k_v( KVList, [], [], OrdKs, OrdVs ).

kv_to_ord_k_v( [], OrdKs, OrdVs, OrdKs, OrdVs ).
kv_to_ord_k_v( [K-V|T], AccKs, AccVs, OrdKs, OrdVs ) :-
	ord_add_element( AccKs, K, NextKs ),
	( is_list(V) -> 
		ord_add_list( V, AccVs, NextVs )
		;
		ord_add_element( AccVs, V, NextVs )
	),
	kv_to_ord_k_v( T, NextKs, NextVs, OrdKs, OrdVs ).