1049: fantasime 的魔法工坊

Memory Limit:128 MB Time Limit:1.000 S
Judge Style:Text Compare Creator:
Submit:31 Solved:17

Description

多年以后,当你面对 “脱不掉魔法师的长袍” 的批评时,一定会想起那个走进 fantasime 工坊的傍晚。

多么荣幸啊!你成为了 $2^{2^{2}}$ 世纪最伟大的魔法师 fantasime 的弟子!当你推开工坊的那古朴厚重的木门的时候,既没有想象中的木制家具占据这个房间,也没有充满神秘色彩的瓶瓶罐罐能够吸引你的视线。让人意想不到的,在这藏匿于偏远荒原的魔法木屋的厅中竟只有一台奇怪形状的机器!

“这台机器是魔法发生器。” fantasime 向你说明,他早已简化了那些复杂的魔法阵的画法,让不会画画的人也有使用魔法的权力。“都什么年代了,还在画传统魔法阵!有了这台魔法发生器,只要能敲键盘就可以一睹魔法的深渊!”

作为 fantasime 的弟子,你的任务就是学会使用这台魔法发生器。但是 fantasime 很懒,他甩给你一本魔法发生器的用户手册便回自己的卧室睡觉了。

你并没有在意 fantasime 的冷漠,面前这台立方体的机器早已令你陷入了自己魔法生涯的回忆当中。为了将魔法阵画得完美,你练习用掉的纸张比面前这台复杂机器的零件更多;为了能进入这间工坊,你在魔法考试中的作品远比面前这台丑陋机器华丽,但这一切在这台可怖机器面前变得毫无意义。

无论怎样,你还是不得不看这台冰冷机器的用户手册:

属性属性 决定了魔法所释放力量的类型。它是一个仅由小写英文字母构成的字符串,具体属性请查阅本手册后的附录:属性列表。

决定了魔法所释放力量的形式。它是一个仅有小写英文字母构成的字符串,具体属性请查阅本手册后的附录:形列表。

是描述一个魔法的最基本单位,每个魔法至少有一个 由一个 属性,零个或一个或多个 组成。它的基本形式为:<属性>[形,...]。其中 <属性> 叫做 属性块[形,...] 叫做 形列表 之间用 , 分隔,形列表 中最后一个 后没有 ,

魔法块魔法块 是一个完整的魔法,它由一个或多个 组成。它的基本形式为 {核,...},其中 之间用 , 分隔,最后一个 后没有 ,

用户将一个合法 魔法块 输入到 魔法发生器 中,机器便会自动生成魔法阵并生产出来。不过 魔法发生器 只能识别该手册属性列表中的 属性 和形列表中的 。一个合法的 魔法块 中允许包含空格。

附录:属性列表

firewaterairearthwoodmetallightdarktimelife

附录:形列表

clusterscatterexpandfloatknottwistshatterreverseshift

显然在使用这台机器之前,你需要判断什么样的魔法块是合法的。

Input

输入一行,一个仅包含小写字母、{}[]<> 和空格的字符串 $S$($1 <|S| \le 2 \times 10^5$)。

Output

对于一个合法的魔法块,输出 “YES”(没有引号);否则输出 “NO”(没有引号)。

Sample Input Copy

{<fire>[cluster,cluster,cluster]}

Sample Output Copy

YES

HINT

为了方便理解,以下给出一些合法的魔法块和非法的魔法块。

以下的魔法块都是合法的:

{<fire>[cluster,float]}

{<wood>[knot]}

{<water>[twist],<water>[twist]}

{<fire>[float],<air>[expand,shift]}

{ < fire> [float], <air >[ expand , shift] }

以下的魔法块是非法的:

{<fi re>[cluster,float]}:属性块中仅能有一个属性。

{<wood>[kn ot]}:形列表中形应该用 , 分隔。

{water[twist]}:核形式非法。

{<water>twist}:核形式非法。

{<fire>[float],<air>[expand,shirt]}:形列表中形不匹配。

<wood>[knot]:核并不是一个魔法块。

{<fire>[float] <air>[expand]}:核之间应该用 , 分隔。

{<QAQ>[cry]}:属性不匹配,形也不匹配。