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

[ABC219C] Neo-lexicographic Ordering

配点 : 300300

問題文

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

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

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

辞書順とは?

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

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

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

制約

  • XXa ,, b ,,, \ldots, z を並べ替えて得られる
  • 2N500002 \leq N \leq 50000
  • NN は整数
  • 1Si10(1iN)1 \leq |S_i| \leq 10 \, (1 \leq i \leq N)
  • SiS_i は英小文字からなる (1iN)(1 \leq i \leq N)
  • SiSjS_i \neq S_j (1i<jN)(1 \leq i \lt j \leq N)

入力

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

XX

NN

S1S_1

S2S_2

\vdots

SNS_N

出力

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

bacdefghijklmnopqrstuvwxzy
4
abx
bzz
bzy
caa
bzz
bzy
abx
caa

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

zyxwvutsrqponmlkjihgfedcba
5
a
ab
abc
ac
b
b
a
ac
ab
abc