split(L,P,R):-split(L,P,[],R).
split([],_,[],[]).
split([],_,S,[S]) :- S \= [].
split([P|T],P,[],R) :- split(T,P,[],R).
split([P|T],P,L,[L|R]) :- L \= [], split(T,P,[],R).
split([H|T],P,S,R) :- H \= P, append(S, [H], S2), split(T,P,S2,R).
:- split
(['_', '_', '#', '_', '#', '_'], '#', X
), write(X
), nl, split
(['_', '_', '#', '_', '#', '#', '_'], '#', Y
), write(Y
), nl, split
(['_', '_', '#', '_', '#', '#', '_', '#', '#'], '#', Z
), write(Z
), nl.
c3BsaXQoTCxQLFIpOi1zcGxpdChMLFAsW10sUikuCnNwbGl0KFtdLF8sW10sW10pLgpzcGxpdChbXSxfLFMsW1NdKSA6LSBTIFw9IFtdLgpzcGxpdChbUHxUXSxQLFtdLFIpIDotIHNwbGl0KFQsUCxbXSxSKS4Kc3BsaXQoW1B8VF0sUCxMLFtMfFJdKSA6LSBMIFw9IFtdLCBzcGxpdChULFAsW10sUikuCnNwbGl0KFtIfFRdLFAsUyxSKSA6LSBIIFw9IFAsIGFwcGVuZChTLCBbSF0sIFMyKSwgc3BsaXQoVCxQLFMyLFIpLgoKOi0gc3BsaXQoWydfJywgJ18nLCAnIycsICdfJywgJyMnLCAnXyddLCAnIycsIFgpLCB3cml0ZShYKSwgbmwsCiAgIHNwbGl0KFsnXycsICdfJywgJyMnLCAnXycsICcjJywgJyMnLCAnXyddLCAnIycsIFkpLCB3cml0ZShZKSwgbmwsCiAgIHNwbGl0KFsnXycsICdfJywgJyMnLCAnXycsICcjJywgJyMnLCAnXycsICcjJywgJyMnXSwgJyMnLCBaKSwgd3JpdGUoWiksIG5sLg==