package main

import(
	"fmt"
	"strings"
)

// func main() {
// 	var a, b, c int
// 	fmt.Scan(&a, &b, &c)
// 	if 4*a*b < (c*c + a*a + b*b - 2*c*a - 2*c*b + 2*a*b) {
// 		fmt.Print("Yes")
// 	} else {
// 		fmt.Print("No")
// 	}
// }

var alphabet []string = []string{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}
var result [][]string = make([][]string, 0, 10*10*10)
var process [][]string = make([][]string, 0, 10*10*10*10)

func sameType(x, y []string) bool {
	n := len(x)
	if n != len(y) {
		return false
	}
	for i := 0; i < n; i++ {
		for j := 0; j < n; j++ {
			if (x[i] != x[j] && y[i] == y[j]) || (x[i] == x[j] && y[i] != y[j]) {
				return false
			}
		}
	}
	return true
}

func member(x []string) bool {
	for _, y := range process {
		if sameType(x, y){
			return true
		}
	}
	return false
}

func search(n, k int, x []string) {
	if len(x) == n {
		if !member(x) {
			result = append(result, x)
		} 
	} else {
		for _, char := range alphabet {
			if !member(x) {
				process = append(process, x)
				search(n, k + 1, append(x, char))
			}
		}
	}
}


func main() {
	var n int
	fmt.Scan(&n)
	search(n, 0, []string{})
	for _, r := range result {
		fmt.Println(strings.Join(r, ""))
	}
}
