奇妙的组合
题号:NC208031
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

Bob迷上了一款单词游戏,但是Bob的等级较低,目前只收获了三个字母A,B,C。Alice认为Bob不务正业,于是打算考一下Bob。Alice的问题如下:
显然,三个字母(可以重复)有十种类型的无序(例如:ABC和BCA是一种类型,按照下面的规则都可以得到字母M)单词组合,每组成其中的一种组合,Bob都可以发动技能,获得另外一种的单词(每次Bob都可以发动技能,发动技能没有代价):
1.无序组合AAA,可以得到D
2.无序组合AAB,   可以得到E
3.无序组合AAC,   可以得到F
4.无序组合BBB,   可以得到G
5.无序组合ABB,   可以得到H
6.无序组合BBC,   可以得到I
7.无序组合CCC,   可以得到J
8.无序组合ACC,   可以得到K
9.无序组合BCC,   可以得到L
10.无序组合ABC,   可以得到M
Alice会任意给出一行字母,每个字母都在D~M范围内。Bob的任务是通过已有的三个字母A,B,C,组成一个最短序列,使得可以通过发动技能,来依次获得Alice给出的字母,也就是必须按照顺序获得Alice给出的字母。
Alice规定,当Bob拥有三个连续的字母时,可以发动技能,获得对应的新的字母。当发动技能之后,原来的字母不会消失,原来的字母的顺序也不会改变。

输入描述:

第一行输入T(T<10),表示数据的组数。
对于每一组,输入一个非空字符串s,(|s|<40000),只包括{D,E,F,G,H,I,J,K,L,M},表示Bob需要依次获得的单词序列。

输出描述:

每组数据输出一行,表示Bob最小序列的最短长度。
示例1

输入

复制
1
HLJMEE

输出

复制
9

说明

Bob填入的最短序列可以为:ABBCCCBAA
首先填入ABB获得H;再填入CC(加上前面的B,组成BCC)获得L;再填入C(加上前面的CC,组成CCC)获得J;再填入BA(加上前面的C,组成CBA)获得M;
最后填入A(加上前面的BA,组成BAA),获得E;再次获得E。
示例2

输入

复制
1
FE

输出

复制
4

说明

Bob填入的最短序列可以为:CAAB