#P16880. [Spoj5153]Compressed String

[Spoj5153]Compressed String

题目描述

Chris 每天都要处理非常长的字符串。由于字符串可能长到无法直接存储,她会把字符串压缩成较短的表达式。

压缩操作如下:

  1. 在原字符串中找到一段连续重复出现的子串;
  2. 把这一段写成 [S]N 的形式,其中 S 是重复的字符串,N 表示重复次数;
  3. 可以重复进行上述操作,因此方括号可以嵌套。

例如:

  • cabababd 可以写成 c[ab]3d
  • [a]2 表示 aa
  • [[ab]2c]2 表示 ababcababc

注意,一个字符串的压缩形式并不唯一。例如 cabababd 也可以写成 c[ab]1ababdca[ba]2bd

Chris 写了一个程序来自动完成压缩,但这个程序可能出错。现在给定 Chris 的标准压缩结果以及程序产生的压缩结果,请判断它们解压后是否表示同一个字符串。

如果不同,还需要输出它们第一个不同字符的位置。位置从 11 开始编号。

如果其中一个解压后的字符串是另一个字符串的严格前缀,那么第一个不同位置为较短字符串长度加 11

输入格式

第一行一个整数 TT,表示测试用例数。

对于每组测试数据:

  • 第一行是 Chris 的标准压缩字符串;
  • 第二行是程序产生的压缩字符串。

压缩字符串只包含:

  • 小写英文字母 az
  • 方括号 []
  • 数字 09

每个右方括号 ] 后一定紧跟一个非负整数,表示方括号内字符串的重复次数。重复次数可以为 00

方括号可以嵌套。

每个压缩字符串的长度均不超过 2020

题目中的数值可能很大,不能假设它们能够存入 32 位整数。

输出格式

对于第 kk 组测试数据:

  • 如果两个压缩字符串解压后完全相同,输出:
Case #k: YES
  • 否则输出:
Case #k: NO p

其中 pp 是两个解压字符串第一个不同字符的位置。

样例

输入

5
a[a]12
[[a]3]4a
[z]12
zzzzzzzzz
[a[ba]2b]12
[ab]36
[a]123123123[icpc]2
[[a]123]1001001inter
aismoreeasierthanc
gismuchharderthanj

输出

Case #1: YES
Case #2: NO 10
Case #3: YES
Case #4: NO 123123125
Case #5: NO 1

说明

对于样例 3:

[a[ba]2b]12

可以看成:

[ababab]12

又等价于:

[[ab]3]12

最终等价于:

[ab]36

数据范围

  • 1T1\le T
  • 每个压缩字符串长度不超过 2020
  • 解压后的字符串可能非常长,不能直接展开。