100 atcoder#ABC219C. [ABC219C] Neo-lexicographic Ordering

[ABC219C] Neo-lexicographic Ordering

题目描述

AtCoder 王国を治める高橋君は、英小文字のアルファベット順を変更することにしました。

新たなアルファベット順はa , , b , , ,\ \ldots, z を並べ替えて得られる文字列 X X を用いて表されます。X X i  (1  i  26) i\ \,\ (1\ \leq\ i\ \leq\ 26) 文字目は、新たな順番において i i 番目に小さい英小文字を表します。

AtCoder 王国には N N 人の国民がおり、それぞれの国民の名前は S1, S2, , SN S_1,\ S_2,\ \dots,\ S_N です。ここで、Si  (1  i  N) S_i\ \,\ (1\ \leq\ i\ \leq\ N) は英小文字からなります。
これらの名前を、高橋君の定めたアルファベット順に基づく辞書順に従って並べ替えてください。

辞書順とは? 辞書順とは簡単に説明すると「単語が辞書に載っている順番」を意味します。より厳密な説明として、英小文字からなる相異なる文字列 S, T S,\ T の大小を判定するアルゴリズムを以下に説明します。

以下では「 S S i i 文字目の文字」を Si S_i のように表します。また、 S S T T より辞書順で小さい場合は S < T S\ \lt\ T 、大きい場合は S > T S\ \gt\ T と表します。

  1. S, T S,\ T のうち長さが大きくない方の文字列の長さを L L とします。i=1,2,,L i=1,2,\dots,L に対して Si S_i Ti T_i が一致するか調べます。
  2. Si  Ti S_i\ \neq\ T_i である i i が存在する場合、そのような i i のうち最小のものを j j とします。そして、Sj S_j Tj T_j を比較して、Sj S_j Tj T_j よりアルファベット順で小さい場合は S < T S\ \lt\ T 、そうでない場合は S > T S\ \gt\ T と決定して、アルゴリズムを終了します。
  3. Si  Ti S_i\ \neq\ T_i である i i が存在しない場合、S S T T の長さを比較して、S S T T より短い場合は S < T S\ \lt\ T 、長い場合は S > T S\ \gt\ T と決定して、アルゴリズムを終了します。

输入格式

入力は以下の形式で標準入力から与えられる。

X X N N S1 S_1 S2 S_2 \vdots SN S_N

输出格式

N N 行出力せよ。i  (1  i  N) i\ \,\ (1\ \leq\ i\ \leq\ N) 行目には、高橋君の定めたアルファベット順に基づく辞書順に従って国民の名前を並べ替えたとき、i i 番目に小さいものを出力すること。

题目大意

给定一个字符串 xx,保证其长度为 2626 且由az的所有字母重新排列而成。当甲字符比乙字符在 xx 中先出现时,甲字符小于乙字符。

同时给出 nn 个字符串 sis_i。请将 sis_i 按照新定义的字典序重新排序后输出。

bacdefghijklmnopqrstuvwxzy
4
abx
bzz
bzy
caa
bzz
bzy
abx
caa
zyxwvutsrqponmlkjihgfedcba
5
a
ab
abc
ac
b
b
a
ac
ab
abc

提示

制約

  • X X a , , b , , ,\ \ldots, z を並べ替えて得られる
  • 2  N  50000 2\ \leq\ N\ \leq\ 50000
  • N N は整数
  • $ 1\ \leq\ |S_i|\ \leq\ 10\ \,\ (1\ \leq\ i\ \leq\ N) $
  • Si S_i は英小文字からなる (1  i  N) (1\ \leq\ i\ \leq\ N)
  • Si  Sj S_i\ \neq\ S_j (1  i < j  N) (1\ \leq\ i\ \lt\ j\ \leq\ N)

Sample Explanation 1

高橋君が新たに設定したアルファベット順において、ba より小さく、zy より小さいです。そのため、国民の名前を辞書順に並べ替えると、小さい順に bzz , , bzy , , abx , , caa となります。