[COCI2016-2017#1] Vještica
题目描述
Matej 面临着一个难题。在此之前,我们必须熟悉一种称作前缀树(`trie`)的数据结构。前缀树以前缀的方式,储存单词:
- 前缀树的每一条边都用英文字母表中的字母表示。
- 前缀树的根节点表示空前缀。
- 前缀树的每个其他节点都表示一个非空前缀。依次连接根节点至该节点路径上所标有的字母,即可得到该前缀。
- 不存在从一个节点出发的、标有相同字母的两条边。
例如,这棵前缀树储存了 `A,to,tea,ted,ten,i,in,inn`:
![](https://cdn.luogu.com.cn/upload/image_hosting/etllxob4.png)
现在,Matej 获得了 $n$ 个单词,并可以将其中的一些单词重组。例如 `abc` 可以重组为 `acb,bac,bca,cab,cba`。请你计算,将一些单词重组后,储存这些单词的前缀树节点数的最小值。
输入输出格式
输入格式
第一行一个整数 $n$。
接下来 $n$ 行,每行一个字符串,表示 Matej 获得的单词。
输出格式
一行,一个整数,表示将一些单词重组后,储存这些单词的前缀树节点数的最小值。
输入输出样例
输入样例 #1
3
a
ab
abc
输出样例 #1
4
输入样例 #2
3
a
ab
c
输出样例 #2
4
输入样例 #3
4
baab
abab
aabb
bbaa
输出样例 #3
5
说明
#### 样例 3 解释
所有单词均可以重组为 `aabb`。显然,前缀树最少的节点数应为 $5$(包含了表示空前缀的根节点)。
------------
#### 数据规模与约定
对于 $100\%$ 的数据,保证 $1\le n\le 16$。
所有单词的长度和不超过 $10^6$,且只包含小写字母。
------------
#### 说明
**题目译自 [COCI2016-2017](https://hsin.hr/coci/archive/2016_2017/) [CONTEST #1](https://hsin.hr/coci/archive/2016_2017/contest1_tasks.pdf) _T6 Vještica_**。