Cod sursa(job #956838)
#include<stdio.h>
int n;
void generate(){
int i, m=0, x[n], v[n];
for(i=0; i<n; i++) v[i]=0;
while(m>=0){
if(m<n){
for(i=0; i<n && v[i]; i++);
x[m]=i, v[i]=1, m++;
continue;
}
for(i=0; i<n; i++) printf("%d ", x[i]+1);
printf("\n");
while(--m>=0){
v[x[m]]=0;
for(i=x[m]+1; i<n && v[i]; i++);
if(i<n){
x[m]=i;
v[i]=1;
m++;
break;
}
}
}
}
int main(){
freopen("permutari.in", "rt", stdin);
freopen("permutari.out", "wt", stdout);
scanf("%d", &n);
generate();
fclose(stdin);
fclose(stdout);
return 0;
}