ALPHA_FIRST = 'a'
ALPHA_LAST = 'b'
def NEXT(c):
	return chr(ord(c)+1)
def OUTPUT(w,i):
	print(w[:i])

def DuvalGeneration(n):
	w = list("" for x in range(n))
	w[0] = ALPHA_FIRST
	i = 0
	while i != -1:
		for j in range(1, n-i):
			w[i+j] = w[j-1]
		OUTPUT("".join(w),i+1)
		i = n-1
		while i > -1 and w[i] == ALPHA_LAST:
			i = i-1
		if i > -1: 
			w[i] = NEXT(w[i]) 
