#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define N 14
void f(int p, int *a, int n) {
  int i;
  if (n == p) {
    for (i = 0; i < n; i++)
      printf("%c, ", a[i] + 'a');
    putchar('\n');
  } else {
    int *b;
    if ((b = malloc(sizeof(int) * n)) != 0) {
      for (i = 0; i < n; i++)
        if (a[i] < 0) {
          memcpy(b, a, sizeof(int) * n);
          b[i] = p;
          f(p + 1, b, n);
        }
      free(b);
    }
  }
}

#define N 14
int main(int argc, char *argv[]) {
  int *a, n, i;
  if (argc != 2) {
  usage:
    printf("usage: %s <num>\n", argv[0]);
    printf("1 < <num> < %d\n", N + 1);
    return 1;
  }
  
  if ((n = atoi(argv[1])) <= 1 || n > N)
    goto usage;
  if ((a = malloc(sizeof(int) * n)) != 0) {
    for (i = 0; i < N; i++)
      a[i] = -1;
    f(0, a, n);
    free(a);
  }
  return 0;
}
/* end */
