s(1, A, B, C, [1|D], E, F, G, H) :- if( ( [G,H]=[I,p], B<A, user:rc(C,p/1,J,K), L is A*K, D=[M|N], p(J,L,B,C,M,E,O,I), ( E==fail->true; user:rc(C,p/1,P,Q), R is O*Q, N=[S|T], p(P,R,B,C,S,E,U,I), (E==fail->true;F is U,T=[])) ), true, (F is A,D=[],E=fail) ).