:- prompt(_, '').
:- use_module(library(readutil)).
:- use_module(library(apply)).
car([X,_],X).
cdr([_,X],X).
move(From1,To1,ResFrom,ResTo):-append(From2,ResFrom,From1),
sort(From2,[X]),
ResFrom=[Y|_],
X\=Y,
member(To1,[[X|_],[]]),
!,
append(From2,To1,ResTo),!,
length(ResTo,Len),
Len<5.
move(From1,To1,[],ResTo):-sort(From1,[X]),
member(To1,[[X|_],[]]),!,
append(From1,To1,ResTo),!,
length(ResTo,Len),
Len<5.
get_next([Next1,_],Next):-maplist(car,Next1,Next2),msort(Next2,Next).
is_next_big(E1,Next1):-get_next(Next1,Next2),sort([E1,Next2],[E1,Next2]).
is_next_equal(E1,Next1):-get_next(Next1,Next2),sort([E1,Next2],[E1]).
deduplication([],[],[],[]):-!.
deduplication([],[E1|Data],[E1|ResData],[E2|ResMemo]):-!,
get_next(E1,E2),
deduplication([],Data,ResData,ResMemo).
deduplication(Memo,[],[],Memo):-!.
deduplication([E1|Memo],[E2|Data],ResData,ResMemo):-is_next_equal(E1,E2),
!,
deduplication([E1|Memo],Data,ResData,ResMemo).
deduplication([E1|Memo],[E2|Data],ResData,ResMemo):-is_next_big(E1,E2),
!,
deduplication(Memo,[E2|Data],ResData,ResMemo).
deduplication([E1|Memo],[E2|Data],[E2|ResData],[E3|ResMemo]):-!,
get_next(E2,E3),
deduplication([E1|Memo],Data,ResData,ResMemo).
main:-
process,
process:-
/* your code goes here */
Test=[[[[3,1,1,2],1],[[2,4,4,2],2],[[1,4,2,4],3],[[3,1,3,3],4],[[],5],[[],6]],[]],
get_next(Test,Test2),
:- main.
Oi0gc2V0X3Byb2xvZ19mbGFnKHZlcmJvc2Usc2lsZW50KS4KOi0gcHJvbXB0KF8sICcnKS4KOi0gdXNlX21vZHVsZShsaWJyYXJ5KHJlYWR1dGlsKSkuCjotIHVzZV9tb2R1bGUobGlicmFyeShhcHBseSkpLgoKY2FyKFtYLF9dLFgpLgpjZHIoW18sWF0sWCkuCgptb3ZlKEZyb20xLFRvMSxSZXNGcm9tLFJlc1RvKTotYXBwZW5kKEZyb20yLFJlc0Zyb20sRnJvbTEpLAoJCQkJCQkJc29ydChGcm9tMixbWF0pLAoJCQkJCQkJUmVzRnJvbT1bWXxfXSwKCQkJCQkJCVhcPVksCgkJCQkJCQltZW1iZXIoVG8xLFtbWHxfXSxbXV0pLAoJCQkJCQkJISwKCQkJCQkJCWFwcGVuZChGcm9tMixUbzEsUmVzVG8pLCEsCgkJCQkJCQlsZW5ndGgoUmVzVG8sTGVuKSwKCQkJCQkJCUxlbjw1LgoJCQkJCQkJCm1vdmUoRnJvbTEsVG8xLFtdLFJlc1RvKTotc29ydChGcm9tMSxbWF0pLAoJCQkJCQltZW1iZXIoVG8xLFtbWHxfXSxbXV0pLCEsCgkJCQkJCWFwcGVuZChGcm9tMSxUbzEsUmVzVG8pLCEsCgkJCQkJCWxlbmd0aChSZXNUbyxMZW4pLAoJCQkJCQlMZW48NS4KCQkJCQkJCgpnZXRfbmV4dChbTmV4dDEsX10sTmV4dCk6LW1hcGxpc3QoY2FyLE5leHQxLE5leHQyKSxtc29ydChOZXh0MixOZXh0KS4KaXNfbmV4dF9iaWcoRTEsTmV4dDEpOi1nZXRfbmV4dChOZXh0MSxOZXh0Miksc29ydChbRTEsTmV4dDJdLFtFMSxOZXh0Ml0pLgppc19uZXh0X2VxdWFsKEUxLE5leHQxKTotZ2V0X25leHQoTmV4dDEsTmV4dDIpLHNvcnQoW0UxLE5leHQyXSxbRTFdKS4KCgpkZWR1cGxpY2F0aW9uKFtdLFtdLFtdLFtdKTotIS4KZGVkdXBsaWNhdGlvbihbXSxbRTF8RGF0YV0sW0UxfFJlc0RhdGFdLFtFMnxSZXNNZW1vXSk6LSEsCgkJCQkJCQkJCQlnZXRfbmV4dChFMSxFMiksCgkJCQkJCQkJCQlkZWR1cGxpY2F0aW9uKFtdLERhdGEsUmVzRGF0YSxSZXNNZW1vKS4KZGVkdXBsaWNhdGlvbihNZW1vLFtdLFtdLE1lbW8pOi0hLgpkZWR1cGxpY2F0aW9uKFtFMXxNZW1vXSxbRTJ8RGF0YV0sUmVzRGF0YSxSZXNNZW1vKTotaXNfbmV4dF9lcXVhbChFMSxFMiksCgkJCQkJCQkJCQkJISwKCQkJCQkJCQkJCQlkZWR1cGxpY2F0aW9uKFtFMXxNZW1vXSxEYXRhLFJlc0RhdGEsUmVzTWVtbykuCmRlZHVwbGljYXRpb24oW0UxfE1lbW9dLFtFMnxEYXRhXSxSZXNEYXRhLFJlc01lbW8pOi1pc19uZXh0X2JpZyhFMSxFMiksCgkJCQkJCQkJCQkJISwKCQkJCQkJCQkJCQlkZWR1cGxpY2F0aW9uKE1lbW8sW0UyfERhdGFdLFJlc0RhdGEsUmVzTWVtbykuCmRlZHVwbGljYXRpb24oW0UxfE1lbW9dLFtFMnxEYXRhXSxbRTJ8UmVzRGF0YV0sW0UzfFJlc01lbW9dKTotISwKCQkJCQkJCQkJZ2V0X25leHQoRTIsRTMpLAoJCQkJCQkJCQlkZWR1cGxpY2F0aW9uKFtFMXxNZW1vXSxEYXRhLFJlc0RhdGEsUmVzTWVtbykuCQkJCQkJCQkJCQoKbWFpbjotCglwcm9jZXNzLAoJaGFsdC4KCnByb2Nlc3M6LQoJLyogeW91ciBjb2RlIGdvZXMgaGVyZSAqLwoJVGVzdD1bW1tbMywxLDEsMl0sMV0sW1syLDQsNCwyXSwyXSxbWzEsNCwyLDRdLDNdLFtbMywxLDMsM10sNF0sW1tdLDVdLFtbXSw2XV0sW11dLAoJZ2V0X25leHQoVGVzdCxUZXN0MiksCgl3cml0ZShUZXN0MiksCgl0cnVlLgoKOi0gbWFpbi4=