remove_dups([],[]).
remove_dups([H|T], TT) :- msort(H,SH), contains_dup(SH,T), remove_dups(T, TT).
remove_dups([H|T], [H|TT]) :- msort(H,SH), \+ contains_dup(SH,T), remove_dups(T, TT).
contains_dup
(_
, []) :- fail.contains_dup(SH, [H|_]) :- msort(H, SH).
contains_dup(SH, [_|T]) :- contains_dup(SH, T).
:- remove_dups
([[1,2,3], [3,2,1],[0,1,2],[3,1,2], [1,2,0]],X
), write(X
).
cmVtb3ZlX2R1cHMoW10sW10pLgpyZW1vdmVfZHVwcyhbSHxUXSwgVFQpIDotIG1zb3J0KEgsU0gpLCBjb250YWluc19kdXAoU0gsVCksIHJlbW92ZV9kdXBzKFQsIFRUKS4KcmVtb3ZlX2R1cHMoW0h8VF0sIFtIfFRUXSkgOi0gbXNvcnQoSCxTSCksIFwrIGNvbnRhaW5zX2R1cChTSCxUKSwgcmVtb3ZlX2R1cHMoVCwgVFQpLgoKY29udGFpbnNfZHVwKF8sIFtdKSA6LSBmYWlsLgpjb250YWluc19kdXAoU0gsIFtIfF9dKSA6LSBtc29ydChILCBTSCkuCmNvbnRhaW5zX2R1cChTSCwgW198VF0pIDotIGNvbnRhaW5zX2R1cChTSCwgVCkuCgo6LSByZW1vdmVfZHVwcyhbWzEsMiwzXSwgWzMsMiwxXSxbMCwxLDJdLFszLDEsMl0sIFsxLDIsMF1dLFgpLCB3cml0ZShYKS4=