A:=(w,a)->[op(w),a]: B:=w->[op(2..nops(w),w)]: F:=proc(w) local v,i,j,W,s,V: if w=[] then RETURN(w):fi: i:=w[1]: s:=[]: W:=[]: for j from 2 to nops(w) do if w[j]<=i then W:=A(W,w[j]): else W:=A(W,i+1): s:=[w[j],op(s)]: fi: od: V:=F(W): v:=[i]: for j from 1 to nops(V) do if V[j]<=i then v:=A(v,V[j]): else v:=A(v,s[1]): s:=B(s): fi:od: v: end: