new; cls; n=3; x=zeros(n,1); NN=n-seqa(0,1,n); /* NN={n,n-1,n-2,...,1} */ print/rz permv(x)'; do while not x==(NN-1); x=recXindex(x,NN); print/rz permv(x)'; endo; proc recXindex(x,NN); local dim,j; dim=rows(x); x[dim]=x[dim]+1; j=dim; do until j==0; if x[j]==NN[j]; x[j]=0; x[j-1]=x[j-1]+1; endif; j=j-1; endo; retp(x); endp; proc permv(x); local n,y,i,j,count; n=rows(x); y=zeros(n,1); j=1; do while j<=n; count=0; i=1; do while i<=n; if y[i]==0; count=count+1; if x[j]+1==count; y[i]=j; break; endif; endif; i=i+1; endo; j=j+1; endo; retp(y); endp;