UVA12417 公式编辑器 Formula Editor
题目描述
你需要模拟一个公式编辑器。
**公式**内一共存在三种类型的元素:**字符**(数字,字母,括号和算术运算符),**分式**和**矩阵**。其中分式的分子和分母以及矩阵的单元格也是公式且每个公式都有一个**编辑框**。

如图所示,F1、F2、F3、F4、F5 都是公式,因此都有各自的编辑框。
如果框 $A$ 直接包含框 $B$,则称框 $A$ 是框 $B$ 的父框(例如:F1 是 F2 和 F3 的父框,F3 是 F4 和 F5 的父框);如果框 $A$ 和框 $B$ 有相同的父框,则称它们是同级框(例如:F4 和 F5 是同级框,F2 和 F3 也是同级框)。
**光标**总是直接包含在一个编辑框中。它可能位于框中所有元素的左侧(即编辑框的首部位置),也可能位于所有元素的右侧(即编辑框的尾部位置),或者位于两个连续元素之间。对于光标左侧(右侧)第一个元素(若存在),我们称之为光标的直接左侧(右侧)元素。
光标一共支持六种移动方式:`Home`,`End`,`Up`,`Down`,`Left`, `Right`。假设 $A$ 是直接包含光标的编辑框,则:
- `Home`(`End`):将光标移动至 A 的首部(尾部)位置。
- `Up`(`Down`):如果 A 的直接上方(下方)有一个同级框,则将光标放在该框的首部位置;否则查看 A 的父框,如果 A 的父框的直接上方(下方)有一个同级框,则移至该框的首部位置,否则查看 A 的父框的父框...如果 A 的所有祖先框中都没有这样的同级框,不执行任何操作。
- `Left`(`Right`):有四种情况。
1. 如果光标位于 A 的首部(尾部)位置,则将光标移动至 A 的直接左侧(右侧)同级编辑框的尾部(首部)位置。如果没有这样的框,则将光标放至 A 在其父框中的直接左侧(右侧),如果 A 没有父框,不执行任何操作。
2. 如果光标的直接左侧(右侧)元素是分数,则将光标放在其分子的尾部(首部)位置。
3. 如果光标的直接左侧(右侧)元素是一个 $n$ 行 $m$ 列的矩阵,则将光标放置在第 $\lceil\frac{n}{2}\rceil$ 行和第 $m$ 列(第 $1$ 列)对应的编辑框的尾部位置/首部位置。
4. 如果光标的直接左侧(右侧)元素是字符,则将光标放在该字符的直接左侧(右侧)位置。
输入格式
输入包含多组数据,每行包含一个字符串或一个字符,表示一条命令。
- 单个字符:在光标处插入该字符,并将光标移到其右侧。
- `Fraction`(`Matrix`):在光标处插入一个分式或一个 $1\times1$ 的矩阵,然后向右移动光标。请注意,在向右移动光标之前,插入的分式(矩阵)位于光标的右侧。
- `AddRow`(`AddCol`):找到包含光标的最小矩阵单元格并在其上方(左侧)插入一行(列)单元格,再将光标放置在新行(列)的同一列(行)中。如果没有包含光标的矩阵单元格,则忽略此命令。
- `Home`、`End`、`Up`、`Down`、`Left`、`Right` :根据上述规则移动光标。
- `Done`:表示一组数据输入结束。
输出格式
对于每组输入数据你需要在第一行以 `Case {id}:` 的形式(其中 `{id}` 表示用例编号)打印用例编号(从 $1$ 开始)。换行输出一个字符矩阵表示公式(每行末尾没有空格,但不要省略空行,例如:样例输出的第 $3$ 组数据的末尾有一个空行),最后再输出一个空行。
字符只占据一行,这一行被称作**基线**。特别地,我们使用三个字符 " - " 来表示字符 '-'。公式内直接包含的分式、矩阵的基线与公式基线对齐。不要有多余的空格或空行。
公式中每个元素的字符矩阵格式:
- **矩阵**:格式化矩阵的所有单元格,然后将它们排列成矩阵:同一行单元格的基线对齐,同一列单元格水平对齐。行与行之间用一个空行分隔,列与列之间用一个空格分隔。在每行基线的两侧添加一对方括号。如果有奇数行,整个矩阵的基线就是中间那行的基线;否则,整个矩阵的基线就是中间的空行。
- **分式**:格式化分子和分母,然后在这两个框之间画一条水平线(由 `-` 组成),同时这也是整个分式的基线。水平线的宽度是分子与分母的宽度的较大值加上二(即两边多出一个 -)。分母和分子水平对齐。
本题**水平对齐**均采用**居中对齐**方式。即,在对齐两个公式时,我们会固定较宽公式的位置,并移动另一公式使之对齐;如果对不齐(两个公式宽度奇偶性不同),则将较窄的公式向左移动 $\frac{1}{2}$ 个单位。
说明/提示
输入最多包含 $1000$ 条命令,并且整个输入大小不超过 $200KB$。