Bajtosia 正在为信息学课准备一份演示文稿。为此,她需要访问 $n$ 个网址两两不同的网页,以获取所需的信息。
Bajtosia 使用的网页浏览器有一个输入框,初始为空字符串。通过按键可以修改输入框中的内容,并访问与当前输入框中字符串相对应的网址。可用的操作如下:
- 字母键
a到z:在当前字符串的末尾追加按下的字母。 BACKSPACE键:删除当前字符串的最后一个字母(如果输入框为空,则什么也不做)。ENTER键:访问与当前字符串相对应的网页,然后清空输入框(即将其变为空字符串)。TAB键:将当前字符串自动补全为最近访问过的、且以当前字符串为前缀(即开头部分)的网页网址(如果没有这样的已访问网页,则什么也不做)。
距离提交演示文稿的时间已经不多了,因此 Bajtosia 希望通过最少的按键次数访问所有需要的网页。Bajtosia 不能访问除需要访问的网页之外的任何其他网页。Bajtosia 可以按任意顺序访问这些需要的网页,且每个网页必须恰好访问一次。请帮助 Bajtosia 计算最少的按键次数,并确定需要按下的按键序列。
输入格式
第一行包含一个整数 $n$($1 \le n \le 10^6$),表示 Bajtosia 需要访问的网页数量。
接下来的 $n$ 行中,第 $i$ 行(对于 $1 \le i \le n$)包含一个非空字符串 $s_i$,由小写英文字母(a-z)组成,表示第 $i$ 个网页的网址。字符串 $s_i$ 两两不同。
设 $S = |s_1| + \dots + |s_n|$,保证 $S \le 10^6$。
输出格式
第一行输出一个整数 $k$,表示访问所有给定网页所需的最少按键次数。
第二行输出一个长度为 $k$ 的字符串,表示依次按下的按键序列。其中 BACKSPACE、ENTER 和 TAB 键应分别用字母 B、E 和 T 表示。如果存在多种可行方案,输出其中任意一种即可。
样例
输入样例 1
3 aaaaba aaaaczzz aaaadb
输出样例 1
21 aaaabaETBBdbETBBczzzE
说明
样例解释:
Bajtosia 起初在输入框中逐字输入字符串 aaaaba,然后按下 ENTER。接着她按下 TAB 键,此时输入框中再次出现字符串 aaaaba。随后 Bajtosia 按下两次 BACKSPACE,得到 aaaa,并输入两个字母,得到 aaaadb,然后按下 ENTER。接着,她按下 TAB 键并按下两次 BACKSPACE,再次得到 aaaa。最后,Bajtosia 输入四个字母得到 aaaaczzz,并最后一次按下 ENTER。
整个过程也在下方的“样例解释图解”中进行了展示。
样例测试点:
除了上述样例(测试点 0a)外,还有以下样例测试点:
- 0b:$n = 26$ 个字符串,每个字符串长度为 $20\,000$。每个字符串的前 $19\,999$ 个字符均为字母
a,最后一个字符依次为英文字母表中的字母(a,b, ...,z)。 - 0c:$n = 10$ 个字符串,其中第 $i$ 个字符串(对于 $i = 1, \dots, 10$)由字母
a重复 $18i$ 次组成。 - 0d:$n = 65534$ 个字符串。输入中包含所有长度不超过 $15$ 且仅由字母
a和b组成的非空字符串。 - 0e:$n = 2$ 个字符串。两个字符串的长度均为 $500\,000$,且前 $300\,000$ 个位置的字母相同。第 $300\,001$ 个位置的字符不同。后续字符是随机的。
提示:
在本题中,你只有在比赛结束后才能得知提交的评测得分。
子任务
测试点被分为以下子任务。每个子任务的测试由一个或多个独立的测试点组组成。
| 子任务 | 限制 | 分值 | ||
|---|---|---|---|---|
| 1 | $n \le 8$ 且对于所有 $i \in [1..n]$ 有 $ | s_i | \le 10$ | 17 |
| 2 | 所有 $s_i$ 长度相同 | 12 | ||
| 3 | $S \le 1000$ | 32 | ||
| 4 | $s_i$ 仅由字母 a 和 b 组成 |
18 | ||
| 5 | 无附加限制 | 21 |
如果你的程序只有第一行(最少按键次数)正确,你将获得该测试点 80% 的分数。你不需要输出第二行即可获得这些分数。
样例解释图解
下图展示了上述样例测试点解决过程的各个步骤。
样例解决步骤示意图