#include <stdio.h>
#define ALPHA_FIRST 'a'
#define ALPHA_LAST 'b'
#define NEXT(c) ++c
#define OUTPUT(w,i) w[i] = '\0'; printf("%s\n", w)

void DuvalGeneration(int n) {
  char w[n];
  w[0] = ALPHA_FIRST;
  int i = 0;
  while (i != -1) {
    for (int j = 1; j <= n-i-1; ++j)
      w[i+j] = w[j-1];
    OUTPUT(w,i);
    i = n-1;
    while (i > -1 && w[i] == ALPHA_LAST)
      --i;
    if (i > -1) 
      w[i] = NEXT(w[i]); 
  }
}
