package main

func commonChars(words []string) []string {
	A := int('a')
	countCharacters := func(counters []int, word string) {
		for _, c := range word {
			counters[int(c)-A]++
		}
	}
	setCommon := func(common []int, word []int) {
		for i, count := range word {
			common[i] = min(common[i], count)
		}
	}

	commonCounters := make([]int, 26)
	countCharacters(commonCounters, words[0])

	for _, word := range words {
		wordCounters := make([]int, 26)

		countCharacters(wordCounters, word)
		setCommon(commonCounters, wordCounters)
	}

	var result []string
	for i, count := range commonCounters {
		for count > 0 {
			result = append(result, string(rune(A+i)))
			count--
		}
	}
	return result
}