CF1055D Refactoring

题目描述

Alice 编写了一个程序,现在她想提升代码的可读性。提升可读性的方法之一是为变量赋予有意义的名字,因此 Alice 想要重命名她程序中的一些变量。在她的 IDE 中有一个名为“批量重构”的命令,可以在一次操作中替换许多变量的名字。要使用该命令,Alice 需要选择两个字符串 $s$ 和 $t$,之后对于每个变量,执行如下算法:如果变量名中包含 $s$ 作为子串,则将第一个(且仅第一个)出现的 $s$ 替换为 $t$。如果变量名中不包含 $s$,则该变量名保持不变。 变量列表已知,对于每个变量,既给出了初始名字,也给出了 Alice 希望更改后的名字。此外,对于每个变量,初始名字和目标名字的长度是相等的(否则代码的对齐可能会被破坏)。你需要判断是否可以通过一次“批量重构”命令完成所有变量的重命名,或者判断这是不可能的。

输入格式

第一行包含一个整数 $n$($1 \le n \le 3000$),表示 Alice 程序中的变量数量。 接下来的 $n$ 行,每行一个字符串,表示第 $i$ 个变量的初始名字 $w_1, w_2, \ldots, w_n$。之后还有 $n$ 行,第 $i$ 行表示第 $i$ 个变量的目标名字 $w'_i$。保证 $1 \le |w_i| = |w'_i| \le 3000$。 保证至少存在一个变量的目标名字与初始名字不同。所有的初始名字和目标名字均由小写英文字母组成。对于每个变量,初始名字和目标名字的长度相等。

输出格式

如果无法通过一次“批量重构”完成所有变量的重命名,输出 “NO”(不含引号)。 否则,第一行输出 “YES”(不含引号),接下来两行分别输出 $s$ 和 $t$($1 \le |s|, |t| \le 5000$),表示应当用于替换的字符串。$s$ 和 $t$ 仅包含小写英文字母。 如果存在多种可行的“批量重构”方案,你可以输出任意一种。

说明/提示

由 ChatGPT 4.1 翻译