#include <stdio.h> #include <stdlib.h> #include <string.h>
int next_permutation(int n, char **s) {
int k = -1;
for (int i = 0; i < n-1; i++) {
if (strcmp(s[i], s[i+1]) < 0)
k = i;
}
if (k == -1) return 0;
int l = -1;
for (int i = k+1; i < n; i++) {
if (strcmp(s[k], s[i]) < 0)
l = i;
}
char *tmp = s[k];
s[k] = s[l];
s[l] = tmp;
int i = k+1, j = n-1;
while (i < j) {
tmp = s[i];
s[i++] = s[j];
s[j--] = tmp;
}
return 1;
}
int main() { char *s; int n; scanf("%d", &n); s = calloc(n, sizeof(char)); for (int i = 0; i < n; i++) { s[i] = calloc(11, sizeof(char)); scanf("%s", s[i]); } do { for (int i = 0; i < n; i++) printf("%s%c", s[i], i == n - 1 ? '\n' : ' '); } while (next_permutation(n, s)); for (int i = 0; i < n; i++) free(s[i]); free(s); return 0; }