P2395 BBCode转换Markdown
题目背景
BBCode 和 Markdown 是两种常用的格式语言。所谓格式语言指,例如在某些网站评论区发表评论时,可以使用其对你的评论进行修饰,使文字可以有颜色、粗体等各种样式。
题目描述
#### ~~PDF版题目: http://pan.baidu.com/s/1i3mxk4t 提取密码 hayc~~
### 2025-7-17:链接炸了
BBCode的语法如下所示:
```plain
[h1]Hello World![/h1]
[h2][i]This is a BBCode[/i][/h2]
[b][i]I love[/i] Olympic [i]Informatics[/i][/b]
```
例如,在标签 `[h1]` 中,在 `[h1]` 和 `[/h1]` 之间包裹的内容属于一级标题,对于这之间的文字要按照一级标题的样式渲染。
请注意 BBCode 要求标签的开闭必须**完整且且嵌套无误**,也就是说,如下列的例子都是不合法的 BBCode:
```plain
[h1]Hello World! //标签未闭合
[h1]Hello World![/h2] //两个标签不匹配
[h1][i]Hello World![/h1][/i] //嵌套次序错误
```
另外,极其重要的一点是,BBCode有一个特殊的标签[quote][/quote],在其中的任意文字都不应被解析为BBCode代码,而应该对其进行Markdown化处理后被原样输出。
现在介绍Markdown。其语法如下所示:
```cpp
# Hello World! #
## *This is a Markdown* ##
__*I love* Olympic *Informatics*__
```
你的任务就是将给定的一串 BBCode 转换成 Markdown,并对不合法的输入报错。
题目数据中会出现的所有 BBCode 的标签与其对应 Markdown 对应关系如下,保证不出现除此之外的对应:

对于 `[quote]` 标签的附加说明:

输入格式
所需转换的 BBCode。
输出格式
无
说明/提示
为保证评测顺利不被误判,请注意下列要求:
尊重原输入输出的换行,不自行添删。
对于第一条的例外是, 遇到 `[quote]` 标签不在新的一行时,Markdown 中请另起一行。另外 `[quote]` 标签中的代码段头尾空行请去除,不会出现空白的 quote。
请注意上表中的空格。
对于不合法的 BBCode 输入,你的程序必须报错:
- 对于匹配错误的标签输出 `Match Error`;
- 对于未闭合的标签输出 `Unclosed Mark`,请参考样例。
两种情况同时出现的时候(即同时有匹配错误和未闭合的标签时),按照匹配错误处理,输出 `Match Error`。
由于 quote 标签的特殊性,为保证不出现歧义,数据保证 quote 标签不会出现错误。
例如:对于出现如 `[i][h1]Text[/i]` 这样的情况,按照 `Match Error` 处理,对于 `[i][h1]Text[/h1]` 这样的情况,按照 `Unclosed Mark` 处理。
由于洛谷限制,请大家在输出 `Unclosed Mark` 的时候在 `close` 中间切开分为两段字符串输出,否则会被吞记录。
保证以下三种字符不出现在除quote标签包裹的段落中的文字中:`[` `]` `/` `*` `_` `#` `>`,但地址中可能会出现/字符。
保证输入不会出现标签不完整的情况,例如 `[h1]Text[/h`。
对于曾经在其他地方使用过 Markdown 与 BBCode 的同学:题中的格式不是严格的 BBCode 与 Markdown 格式,请勿被经验迷惑。