P12594 炽声音节旋

题目背景

扶苏是一个舞萌吃。她今天学习了如何编写舞萌的谱面!现在,她要来教一下你了。 舞萌是一款街机游戏,游戏框体共有两个机位,玩家可以单人游玩,亦可以双人组队,其玩法与大多数音乐游戏相似,音符则从屏幕中心向四周移动,玩家需要在合适的时机拍击按键或者触摸屏幕外侧,并达到一定分数才可通关。 ![](https://cdn.luogu.com.cn/upload/image_hosting/6gy8gk1p.png) _图片来源:wikipedia_

题目描述

舞萌框体共有 8 个可供拍打的外键,写谱时以右上角为 1 号键,顺时针进行编号,如下所示: ``` 8 1 7 2 6 3 5 4 ``` 舞萌谱面使用一种名为 s-simai (simplified-simai) 的语言进行编写。为了方便处理,我们对 s-simai 做进一步简化。 ### 节拍与时值 一拍是谱面的一个基本时间单位,被称为一个**四分音**或一个**四分音符**。在本题中,可以认为一拍对应一个固定的时间长度,其具体数值并不重要,你无需区分接下来表述中音符的「时值」和「时长」,可以认为二者是统一的。如果你愿意,可以认为一拍是 $0.5$ 秒,即一个四分音符占 $0.5$ 秒的时间。 除了四分音符外,还有其他时长的音符。一个 $x$ 分音符的时长是一拍的 $\frac{4}{x}$ 倍。例如,一个 $8$ 分音符的时长是一拍的一半,即半拍。如果一拍是 $0.5$ 秒,则一个八分音占 $0.25$ 秒。一个 $12$ 分音符(虽然乐理中一般不采用「十二分音」这样的表述,但这里为了方便描述做了统一)的时长是一拍的 $\frac{1}{3}$。我们保证 $x$ 是 $\{4,8,12,16,24,32\}$ 六个数字之一。 简化的 s-simai 语言一行表示若干个时长相同的音符,以 `{x},` 开头,表示本行音符的时值(时长)。音符与音符之间以 `,` 分隔。例如,`{16},A,B,C,D,` 表示了接下来连续 $4$ 个十六分音的音符分别是 `A`,`B`,`C`,`D`。多行 s-simai 表示的时间是连续的。例如: ``` {16},A,B,C,D, {8},E,F, ``` 就表示了连续的四个 $16$ 分音和两个 $8$ 分音的谱面,谱面的总长度是两拍。 接下来我们介绍音符的具体表示法。 ### 休止符 如果在某一个时值内什么都不做,则谱面中当前音符为空,例如 `{16},,,C,D,` 表示前两个十六分音什么都不做(没有音符),后两个十六分音分别是 `C`,`D` 两个音符。 ### Tap 音符 Tap 音符需要在一个音符**开始**的瞬间拍击某一个标号的按键,然后瞬间松开。在谱面中直接写出需要拍击的按键编号。例如,`{16},1,,2,,` 表示接下来一拍(四个 $16$ 分音)内,在第一个和第三个 $16$ 分音的开始时刻分别拍击 $1$ 号和 $2$ 号按键,第二个和第四个 $16$ 分音里什么都不做。 如果同一个时刻要拍击多个按键,可以把按键的编号用 `/` 隔开。例如,`{16},1/8,,2/7,,` 表示在第一个 $16$ 分音的开始时刻同时拍击 $1$ 和 $8$ 号键,在第三个 $16$ 分音的开始时刻同时拍击 $2$ 和 $7$ 号键。 ### Hold 音符 这是一种需要持续按压的音符,用 `ph[x:y]` 表示在 $p$ 号键上出现一个 Hold 音符,在当前分音开始的瞬间开始按压,持续按压 $y$ 个 $x$ 分音符的长度, 保证 $x$ 是 $\{4,8,12,16,24,32\}$ 六个数字之一。例如,``{16},1h[8:1],,2h[8:1],,`` 表示在第一个 $16$ 分音的开始时刻起按压 $1$ 号键,持续时间为 $1$ 个八分音符,即在第二个 $16$ 分音的结束时刻(也是第三个 $16$ 分音的开始时刻)松开按压;然后在第三个 $16$ 分音的开始时刻类似地按压 $2$ 号按键。同样的,在同一时刻拍击的多个 Hold 音符也可以用 `/` 分隔;`/` 也可以用于分隔 Tap 音符和 `Hold` 音符。例如,下面的谱面都是合法的: - `{4},1h[4:1]/2h[4:1],` - `{4},1h[4:1]/2,` - `{4},1h[4:1]/2/3,` - `{4},1/2/3,` - `{4},1h[4:1]/2h[8:1],` 我们保证 `/` 分隔开的**按键编号**是不同的,即不会出现 `{4},1/1` 或 `{4},1/1h[8:1]` 这样的情况。 ### 无理检测 因为你只有两只手,所以谱面必须保证在任何时刻,都只有**至多**两个按键被按下(含拍击)。类似这样的谱面被称为**多押无理**:`{16},1h[8:1]/2h[8:1],3,`,因为在第二个 $16$ 分音开始时,你的两只手分别正在按压 $1$ 号和 $2$ 号按键,没有多余的手来按压 $3$ 号按键。特别的,`{16},1h[8:1]/2h[8:1],,3,,` 也是多押无理,因为 Hold 音符结束时刻(第二个 $16$ 分音结束时)和 Tap 拍击时刻(第三个 $16$ 分音开始时)是同一个时刻。 在 Hold 音符持续过程内,按键持续处于按下状态,因此无法拍击同一位置上的 Tap 音符。因此这样的谱面被称为**嵌套无理**:`{16},1h[8:1],1,`,因为第二个 $16$ 分音开始时,$1$ 号键处于按下状态,无法拍击。在一个 Hold 音符的结束时刻于同一按键出现一个 Tap 音符也属于嵌套无理,如 `{16},1h[16:1],1`。 给定一个 s-simai 谱面,你需要判定该谱面是否含有上述两种无理。

输入格式

**本题单个测试点内有多组测试数据**。输入的第一行为一个整数 $T$,表示接下来将给出 $T$ 个 s-simai 谱面。对每个谱面,按如下格式给出: 第一行是一个整数 $n$,表示谱面文件的行数。 接下来 $n$ 行,每行是一个字符串,表示 s-simai 谱面的一行。

输出格式

对每组数据依次输出一行一个字符串表示答案。 如果谱面没有无理,输出 `Yes`,否则输出 `No`。

说明/提示

## 数据规模与约定 | 测试点编号 | $n\leq$ | 特殊约定 | | :-: | :-: | :-: | | $1$ | $1$ | $T = 0$ | | $2$ | $1$ | AB | | $3$ | $1$ | A | | $4$ | $1$ | B | | $5$ | $1$ | 无 | | $6$ | $3$ | AB | | $7$ | $3$ | A | | $8$ | $3$ | B | | $9,10$ | $3$ | 无 | 特殊约定中,A 表示谱面中不含 Hold 音符,B 表示谱面中不含用 `/` 分隔的音符,AB 表示同时满足上述约定。 对于全部的测试数据,保证 $1 \leq n \leq 3$,$0 \leq T \leq 1000$,输入的谱面是合法的 s-simai 谱面,保证一个测试点内输入谱面的总行数不超过 $1000$。 一行合法的 s-simai 谱面做如下保证: 1. 以 `{x},` 开头,其中 $x \in \{4,8,12,16,24,32\}$ 2. 以 `,` 结尾,且每行至少包含两个 `,`。 3. 一行的相邻两个 `,` 之间要么是空串(没有字符),要么是若干个 Tap 或 Hold。如果是多个音符,用 `/` 隔开。 4. 一个 Tap 是一个整数 $p$,保证 $1 \leq p \leq 8$。 5. 一个 Hold 表示为 `ph[x:y]`,其中 $p$ 是整数表示按键编号,$y$ 和 $x$ 也都是整数,`h` 是字符 $\texttt{h}$。满足 $1 \leq p \leq 8$,$x \in \{4,8,12,16,24,32\}$,$1 \leq y \leq 9$。 6. 保证用 `/` 隔开的音符不会要求按压或拍击同一个按键。 7. 保证一行里字符 `,` 的数量不会超过 $17$ 个。 形式化地,一行 s-simai 谱面满足如下 BNF 范式: ``` = \{\},, = | ε | , = | / = | = = h\[:\] = [1-8] = [1-9] = 4 | 8 | 12 | 16 | 24 | 32 ``` 特别地,保证一个 `` 里 `` 互不相同,`` 展开不会超过 $16$ 次。 一个合法的 s-simai 谱面是若干行合法的 s-simai 谱面。