AT_njpc2017_g 交換法則

题目描述

在一些编程语言中,对于两个字符串 $s_1$ 和 $s_2$,定义了表示字符串连接的运算符 $+$。例如,当 $s_1=a$,$s_2=b$ 时,$s_1+s_2=ab$。然而,表示字符串连接的运算符 $+$ 与表示数值加法的运算符 $+$ 不同,不满足交换律。例如,当 $s_1=a$,$s_2=b$ 时,$s_1+s_2=ab$,而 $s_2+s_1=ba$,因此不满足交换律。 Yurafuna 君考虑了一种对两个字符串满足交换律的运算符 $@$,定义如下: - $s_1@s_2 = \min(s_1, s_2) + \max(s_1, s_2)$ 这里,$\min$ 和 $\max$ 表示按字典序比较,$+$ 表示字符串的连接。例如,$s_1=a$,$s_2=b$ 时,$s_1@s_2 = \min(a, b) + \max(a, b) = a + b = ab$。同样,$s_2@s_1 = \min(a, b) + \max(a, b) = a + b = ab$,因此满足交换律。 Yurafuna 君非常喜欢这个运算符 $@$,于是他把各种字符串拆分成单个字符后,只用运算符 $@$ 和改变优先级的括号来尝试还原回原字符串。例如,字符串 `apple` 可以通过 $((a@(p@p))@l)@e$ 或 $e@(((p@p)@a)@l)$ 等表达式还原为 `apple`。然而,他发现字符串 `pen` 拆分后无法还原回原字符串。对于无法还原的字符串,他无法进行这个游戏,因此需要判断一个字符串是否可以还原。 给定一个字符串 $S$,请判断将其拆分为单个字符后,是否可以仅用运算符 $@$ 和括号还原回原字符串。

输入格式

输入通过标准输入给出,格式如下: > $S$

输出格式

如果可以还原 $S$,输出一行 `Yes`;否则输出一行 `No`。

说明/提示

### 限制 - $1 \leq |S| \leq 3000$($|S|$ 表示字符串 $S$ 的长度) - $S$ 仅由小写英文字母组成。 由 ChatGPT 4.1 翻译