P16455 [UOI 2026] Unique Letters

题目描述

给定两个由小写拉丁字母组成的字符串 $s$ 和 $t$。 你可以任意排列字符串 $s$ 中的字符,也可以任意排列字符串 $t$ 中的字符。 我们定义字符串 $x$ 的 **唯一化** 过程如下:首先,令辅助字符串 $a$ 为空。然后从左到右依次处理字符串 $x$ 中的字符。设当前字符为 $c$。 - 若字符 $c$ 未在当前字符串 $a$ 中出现,则将该字符 $c$ 追加到 $a$ 的末尾。 - 若字符 $c$ 已经在当前字符串 $a$ 中出现过,则将 $a$ 中从开头到**第一次**出现 $c$ 为止(包含该 $c$)的后缀从 $a$ 中删除。此时,当前正在处理的字符 $c$ 不会被加入。 将处理完所有字符后得到的字符串 $a$ 称为该字符串的 **唯一化** 结果。 请你判断是否能够通过排列得到字符串 $s'$ 与 $t'$,使得: - $s'$ 是字符串 $s$ 中字符的一个排列; - $t'$ 是字符串 $t$ 中字符的一个排列; - 字符串 $s'$ 的 **唯一化** 结果等于 $t'$。

输入格式

第一行包含字符串 $s$ $(1 \le |s| \le 2 \cdot 10^5)$。 第二行包含字符串 $t$ $(1 \le |t| \le 2 \cdot 10^5)$。 两个字符串均仅由小写拉丁字母组成。

输出格式

若无法得到满足要求的字符串 $s'$ 与 $t'$,输出 `NO`。 否则,输出 `YES`。接下来输出两行,分别为字符串 $s'$ 与 $t'$,满足: - $s'$ 是字符串 $s$ 中字符的一个排列; - $t'$ 是字符串 $t$ 中字符的一个排列; - 字符串 $s'$ 的 **唯一化** 结果等于 $t'$。

说明/提示

对于第一个样例: 我们将字符串 $s$ 排列为 `bcdbef`,将字符串 $t$ 排列为 `ef`。 构造字符串 $a$ 的过程如下: - 处理字符 `b` 后,$a = \texttt{b}$; - 处理字符 `c` 后,$a = \texttt{bc}$; - 处理字符 `d` 后,$a = \texttt{bcd}$; - 处理字符 `b` 时,字母 `b` 已在 $a$ 中存在,因此我们将 $a$ 中到第一次出现 `b` 为止的后缀删除。随后,$a$ 变为空字符串; - 处理字符 `e` 后,$a = \texttt{e}$; - 处理字符 `f` 后,$a = \texttt{ef}$。 在第四步中,字母 `c` 和 `d` 也一同从 $a$ 中被移除,而不仅仅是字母 `b`。 最终得到的字符串 $a$ 等于排列后的字符串 $t$,因此存在答案。 对于第二个样例: 我们将字符串 $s$ 排列为 `bcdbfbb`,并保持字符串 $t$ 为 `f`。 构造字符串 $a$ 的过程如下: - 处理字符 `b` 后,$a = \texttt{b}$; - 处理字符 `c` 后,$a = \texttt{bc}$; - 处理字符 `d` 后,$a = \texttt{bcd}$; - 处理字符 `b` 时,字母 `b` 已在 $a$ 中存在,因此我们将 $a$ 中到第一次出现 `b` 为止的后缀删除。随后,$a$ 变为空字符串; - 处理字符 `f` 后,$a = \texttt{f}$; - 处理字符 `b` 后,$a = \texttt{fb}$; - 处理字符 `b` 时,字母 `b` 已在 $a$ 中存在,因此我们将 $a$ 中到第一次出现 `b` 为止的后缀删除。随后,$a = \texttt{f}$。 在第四步中,字母 `c` 和 `d` 也一同从 $a$ 中被移除,而不仅仅是字母 `b`。 最终得到的字符串 $a$ 等于排列后的字符串 $t$,因此存在答案。 在第三个样例中,可以证明:对于字符串 `cgbfedc` 的任何排列,其 **唯一化** 结果都不可能是字符串 `gfbc` 的排列。 ### 计分 - ($4$ 分):$|s|=|t|=1$; - ($8$ 分):$s$ 可以通过排列字母得到 $t$; - ($8$ 分):$s$ 中所有字母互不相同; - ($12$ 分):字符串 $s$ 中仅有一个字母出现次数超过 $1$; - ($24$ 分):$s=\texttt{aaaaabbbbbcccccddddd}$; - ($16$ 分):$|s| \le 8$; - ($28$ 分):无额外限制。 翻译由 DeepSeek V4 Pro 完成