CF765B Code obfuscation

题目描述

Kostya 非常喜欢 Codeforces 的比赛。然而,他很失望,因为他的解决方案经常被 hack。因此,在即将举行的比赛前,他决定对自己的代码进行混淆(有意使代码难以阅读)。 为了混淆代码,Kostya 首先找到他程序中使用的第一个变量名,并将其所有出现的位置替换为单个符号 $a$,然后找出尚未被替换的第二个变量名,将其所有出现的位置替换为 $b$,以此类推。Kostya 很有礼貌,在混淆前不会使用任何一位字母作为变量名。此外,他的程序中最多只会有 26 个不同的标识符。 现在给定去除了空格和换行符的某个程序的标识符列表。请你判断,这个程序是否可能是 Kostya 混淆后的结果。

输入格式

输入只有一行,包含一个只由小写英文字母组成的字符串 $S$($1 \leq |S| \leq 500$),表示去除空白字符后的程序中的标识符列表。

输出格式

如果这个程序可能是 Kostya 混淆后的结果,输出 "YES"(不含引号);否则输出 "NO"(不含引号)。

说明/提示

在第一个样例中,一个可能的标识符列表是“number string number character number string number”。Kostya 的混淆过程如下: - 将所有的 number 替换为 a,结果为 "a string a character a string a", - 再将所有的 string 替换为 b,结果为 "a b a character a b a", - 再将所有的 character 替换为 c,结果为 "a b a c a b a", - 所有的标识符都已被替换,因此混淆完成。 由 ChatGPT 5 翻译