%
% rGraph(a,[[a,b],[b,c],[c,d],[e,f],[d,f],[e,a]],R).
%
%[[brussels, vienna], [vienna, sarajevo], [sarajevo, tirana], [tirana, sofia], [sofia, minsk], [minsk, andorra], [andorra, brussels]]
% rGraph(brussels,[[vienna, sarajevo], [sarajevo, tirana],
% [tirana,sofia], [sofia, minsk], [andorra,
% brussels],[brussels,minsk],[vienna,andorra]],R).

rGraph(Orig,[(Orig,Z)|R],R2):-!,
	reorderGraph([(Orig,Z)|R],R2).
rGraph(Orig,R,R3):-
	member([Orig,X],R),!,
	delete(R,[Orig,X],R2),
	reorderGraph([[Orig,X]|R2],R3).
rGraph(Orig,R,R3):-
	member([X,Orig],R),
	delete(R,[X,Orig],R2),
	reorderGraph([[Orig,X]|R2],R3).


reorderGraph([],[]).

reorderGraph([[X,Y],[Y,Z]|R],[[X,Y]|R1]):-
	reorderGraph([[Y,Z]|R],R1).

reorderGraph([[X,Y],[Z,W]|R],[[X,Y]|R2]):-
	Y\=Z,
	reorderGraph2(Y,[[Z,W]|R],R2).

reorderGraph2(_,[],[]).
reorderGraph2(Y,R1,[[Y,Z]|R2]):-
	member([Y,Z],R1),!,
	delete(R1,[Y,Z],R11),
	reorderGraph2(Z,R11,R2).
reorderGraph2(Y,R1,[[Y,Z]|R2]):-
	member([Z,Y],R1),
	delete(R1,[Z,Y],R11),
	reorderGraph2(Z,R11,R2).
	
printLL([]).	
printLL([H|T]):-
	printLL(T), write(H),nl.


