#aBC219C. [ABC219C] Neo-lexicographic Ordering

[ABC219C] Neo-lexicographic Ordering

AT_abc219_c [ABC219C] Neo-lexicographic Ordering

题目描述

AtCoder 王国的统治者高桥君决定更改英文字母的字母顺序。

新的字母顺序由将 ab\ldotsz 重新排列得到的字符串 XX 表示。XX 的第 ii 个字符(1i261 \leq i \leq 26)表示在新的顺序中第 ii 小的英文字母。

AtCoder 王国有 NN 位国民,每位国民的名字分别为 S1,S2,,SNS_1, S_2, \dots, S_N。其中,SiS_i1iN1 \leq i \leq N)由小写英文字母组成。 请根据高桥君制定的新字母顺序,对这些名字按字典序进行排序。

什么是字典序?字典序简单来说就是“单词在字典中出现的顺序”。更严格地说,判断由小写英文字母组成的不同字符串 SSTT 的大小关系的算法如下:

下面用 SiS_i 表示 SS 的第 ii 个字符。当 SS 在字典序上小于 TT 时记作 S<TS < T,大于时记作 S>TS > T

  1. LLSSTT 中较短的字符串的长度。对于 i=1,2,,Li=1,2,\dots,L,依次比较 SiS_iTiT_i 是否相同。
  2. 如果存在 SiTiS_i \neq T_iii,则取最小的这样的 ii,记为 jj。比较 SjS_jTjT_j,若 SjS_j 在字母顺序上小于 TjT_j,则 S<TS < T,否则 S>TS > T,算法结束。
  3. 如果不存在 SiTiS_i \neq T_iii,则比较 SSTT 的长度,若 SSTT 短,则 S<TS < T,否则 S>TS > T,算法结束。

输入格式

输入按以下格式从标准输入读入。

XX
NN
S1S_1
S2S_2
\vdots
SNS_N

输出格式

输出 NN 行。第 ii 行输出按高桥君指定的新字母顺序排序后,第 ii 小的国民名字。

输入输出样例 #1

输入 #1

bacdefghijklmnopqrstuvwxzy
4
abx
bzz
bzy
caa

输出 #1

bzz
bzy
abx
caa

输入输出样例 #2

输入 #2

zyxwvutsrqponmlkjihgfedcba
5
a
ab
abc
ac
b

输出 #2

b
a
ac
ab
abc

说明/提示

限制条件

  • XX 是由 ab\ldotsz 重新排列得到的字符串。
  • 2N500002 \leq N \leq 50000
  • NN 为整数。
  • 1Si101 \leq |S_i| \leq 101iN1 \leq i \leq N
  • SiS_i 由小写英文字母组成(1iN1 \leq i \leq N
  • SiSjS_i \neq S_j1i<jN1 \leq i < j \leq N

样例解释 1

在高桥君新设定的字母顺序中,ba 小,zy 小。因此,按字典序排序后,国民的名字依次为 bzzbzyabxcaa

由 ChatGPT 4.1 翻译