member(X,[X|_]). member(X,[_|Y]):- member(X,Y). append([],L,L). append([X|A],B,[X|C]):- append(A,B,C). efface(A,[A|L],L):- !. efface(A,[B|L],[B|M]):- efface(A,L,M). efface(_,[],[]). nol(N):- read(N). input(_,_,N,N,L,L). input(X,Y,R,N,L,O):- read(X), read(Y), append([[X,Y]],L,M), C IS R+1, input(_,_,C,N,M,O). enter(L):- nol(N), input(X,Y,0,N,[],L). searchnext(X,Y,[H|T]):- H=[X,Y]; H=[Y,X]; searchnext(X,Y,T). onemove(_,_,[],L):- write(L). onemove(X,Y,L,H):- searchnext(X,Y,L), efface([X,Y],L,N), L<>N, write(N),elan(line), append(H,[Y],F), onemove(Y,Z,N,F). onemove(X,Y,L,H):- searchnext(X,Y,L), efface([Y,X],L,N), L<>N, write(N),elan(line), append(H,[Y],F), onemove(Y,Z,N,F). go:- enter(L),!, onemove(X,Y,L,[X]).