世界上有 $N$ 个国家,编号从 $1$ 到 $N$。每个国家都有一个国家名称和一个国家代码,两者都可以表示为字符串。没有两个国家拥有相同的名称。为简单起见,在本题中,我们假设字符串仅由大写英文字母(A-Z)组成。
ISO (ISO 3166) 发布了一种广为人知的国家代码标准。然而,Xenia 注意到 ISO 3166 有一些奇怪之处。生成的代码不再按字母顺序排列!例如,“INDIA”的国家代码是“IN”,而“INDONESIA”是“ID”。在字母顺序中,“INDONESIA”排在“INDIA”之后,但“IN”却排在“ID”之后。
由于对 ISO 3166 国家代码的这种不一致性感到不满,Xenia 寻求一种更一致的编码方式。她开发了自己的标准,称为 XEN 3166。XEN 3166 的规则如下:
- 对于每个国家,其国家代码必须是其国家名称的子序列。
- 对于每个国家,其国家代码的首字母必须与其国家名称的首字母相同。
- 对于每个国家,其国家代码的长度必须恰好为 $K$。
- 如果国家名称为 $S$ 的国家拥有国家代码 $S'$,国家名称为 $T$ 的国家拥有国家代码 $T'$,那么当且仅当 $S'$ 在字典序上小于 $T'$ 时,$S$ 在字典序上小于 $T$。
字符串 $T = T_1T_2\cdots T_{|T|}$ 是字符串 $S = S_1S_2\cdots S_{|S|}$ 的子序列,如果存在整数序列 $u_1, u_2, \cdots, u_{|T|}$,满足 $1 \le u_1 < u_2 < \cdots < u_{|T|} \le |S|$ 且对于所有 $1 \le i \le |T|$,都有 $S_{u_i} = T_i$。例如,“ID”、“IN”和“IND”是“INDIA”的子序列,但“IDN”、“INN”、“Z”不是“INDIA”的子序列。
字符串 $S = S_1S_2\cdots S_{|S|}$ 在字典序上小于字符串 $T = T_1T_2\cdots T_{|T|}$,如果满足以下至少一个条件: $|S| < |T|$ 且对于所有 $1 \le i \le |S|$,都有 $S_i = T_i$,或者 存在一个索引 $i$,使得 $S_i < T_i$ 且对于所有 $1 \le j < i$,都有 $S_j = T_j$。
例如,假设只有两个国家,$K = 2$。第一个国家的名称是“INDIA”,第二个国家的名称是“INDONESIA”。因此,几种可能的国家代码分配方案为: “INDIA”对应“ID”,“INDONESIA”对应“IN” “INDIA”对应“IA”,“INDONESIA”对应“ID” * “INDIA”对应“II”,“INDONESIA”对应“IO”
给定 $N$、$K$ 以及国家名称列表,请帮助 Xenia 为每个国家分配符合 XEN 3166 规则的国家代码,或者指出无法做到。
输入格式
第一行包含两个整数 $N$ 和 $K$ ($1 \le N \le 1000; 1 \le K \le 200$),分别表示国家数量和国家代码长度。接下来的 $N$ 行,每行包含一个长度在 $1$ 到 $200,000$ 之间的字符串,由大写英文字母(A-Z)组成。第 $i$ 行的字符串表示第 $i$ 个国家的名称。保证所有国家名称的长度之和不超过 $200,000$。同时保证没有两个国家拥有相同的名称。
输出格式
- 如果 Xenia 可以为每个国家分配符合 XEN 3166 规则的国家代码,则在第一行输出“YES”。接下来的 $N$ 行,每行包含一个字符串。第 $i$ 行的字符串表示第 $i$ 个国家的国家代码。如果存在多种可能的分配方案,你可以输出其中任意一种。
- 如果无法为每个国家分配符合 XEN 3166 规则的国家代码,则仅在单行输出“NO”。
样例
样例输入 1
2 2 INDIA INDONESIA
样例输出 1
YES ID IN
说明 1
第一个样例中的场景与题目描述中给出的场景相同。
样例输入 2
3 2 IBAA IAAA IAAC
样例输出 2
NO