C (gcc), 187187 180 bytes
- Saved seven bytes thanks to ceilingcat.
*D,E;r(a,n,g,e){e=g=0;if(!a--){for(g=0;e|=D[g]==g;e|=D[g]==g,g<E;g++)for(n=0;n<g;n=g;n--;)e|=D[n++]==D[g];fore|=D[n]==D[g];for(g=e*E;g<E;g*=e;g<E;)printf("%d ",D[g++]);e||puts("");}for(a--;g<E;r(a))D[a]=g++;}y(_){int M[E=_];D=M;r(_);}