:- seqex([occur/3, count/3, addx/4]).

occur(X,[],0).
occur(X,[Y|Z],W) :- (count(X,Y,A) // occur(X,Z,B)) -> W is A + B.

count(X,[],0).
count(X,[Y|Z],W) :- count(X,Z,W1) -> addx(X,Y,W1,W).

addx(X,X,W1,W)  :- W is W1 + 1.
addx(X,Y,W1,W1) :- X =\= Y.

occurall([], X, []).
occurall([X|Y],Z, [[X,W]|V]) :- (occur(X,Z,W) // occurall(Y,Z,V)).

test(0).
test(N) :-   N > 0, N1 is N-1,
	     (occurall([5,3,6,7,2,1,4,11,8],
		   [[3,4,5,6,7,6,5,4,5,6,5,4,3,5,6,2,3,4,5],
		    [1,2,2,2,1,1,3,2,3,2,3,3,3],
		    [4,5,5,5,5],
		    [13,4,5,6,7,8,7,6,5,4,5,6,7,6,5,5,5,5,4,5,5,5,6,6,6,5,5,4],
		    [1,2,2,2,1,1,3,2,3,2,3,3,3],
		    [3,4],
		    [4,5,5,5,5],
		    [1,2,2,2,1,1,3,2,3,2,3,3,3],
		    [3,4],
		    [4,5,5,5,5],
		    [1,2,3,4,5,6,7,8,7,6,5,4,5,6,7,6,5],
		    [5,5,5,4,5,5,5,6,6,6,5,5,4],
		    [1,2,2,2,1,1,3,2,3,2,3,3,3],
		    [5],
		    [],
		    [4,5,5,5,5], 
		    [1,2,3,4,5,6,7,8,7,6,5,4,5,6,7,6,5], 
		    [1,2,3,4,5,6,7,8,7,6,5,4,5,6,7,6,5],
		    [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]],X)

		    // test(N1)).



?- test(5), write(done), nl. 






