/* listof(X,C,L) is true iff L is a List of length X where each entry is C */
listof([],_).
listof(L,C) :-
L = [Head|Tail],
Head = C,
listof(Tail,C).
myencode(L,R) :-
R = [[X,C]],
length(L,X),
listof(L,C).
myencode(L,R) :-
R = [[N,X],[M,Y]|Z],
/* X \== Y, */
myencode(A,[[N,X]]),
append(A,B,L),
myencode(B,[[M,Y]|Z]).
mynewencode(L,R) :-
R = [[N,C]],
length(L,N),
listof(L,C).
mynewencode(L,R) :-
R = [[N,C]|Tail],
length(A,N),
listof(A,C),
append(A,B,L),
myencode(B,Tail).
mydecode(L,R) :-
myencode(R,L).