#include <stdio.h> 

/* Tamanho máximo dos vetores: 50 elementos */
#define MAXN 30

/* Permutarems caracteres */
char a[MAXN];

/* Contador para número de permutações */
int perm_no=0;

/* perm: rotina recursiva principal, que imprime todas as permutações dos */
/* elementos do vetor a, de n elementos, com o mesmo trecho inicial */
/* a[0],...,a[i-1]. */        
void perm(int i, int n)
{
  if (i==n-1) {
    int k;
    printf("Permutação número %d: ", ++perm_no);
    for (k=0; k<n; k++)
      printf("%c", a[k]);
    printf("\n");
  } else {
    int k;
    int tmp;
    
    for (k=i; k<n; k++) {
      tmp=a[i]; a[i]=a[k]; a[k]=tmp;
      perm(i+1,n);
      tmp=a[i]; a[i]=a[k]; a[k]=tmp;
    }
  }
}

/* set_up: monta configuração inicial */
void set_up(int n)
{
  int k;
  char c='a';
  
  for (k=0; k<n; k++,c++)
    a[k]=c;
}

/* Programa principal... */
main()
{
  int n; /* número de caracteres para permutar */

  printf("Qual é o numero de caracters para permutar? ");
  scanf("%d", &n);
  printf("Aqui vão:\n");

  set_up(n);
  perm(0,n);

  return 0; /* término normal */
}
