CafeCoder Test 001
コンテスト日時
2020/09/21 (Mo) 21:00 - 22:30

E - Strong String

Earlgray
2
s
1024
MB
300

問題文

相異なる文字列 $T$ と $U$ について、$T$ が $U$ よりも 弱い、すなわち $U$ が $T$ よりも 強い とは、次の条件のいずれかを満たすことであると定義します。

  • $T$ の長さが $U$ の長さよりも真に小さい。
  • $T$ と $U$ の長さが等しく、かつ $T$ が $U$ よりも辞書順で真に小さい。

なお、$T$ が $U$ よりも弱いとき、$U$ が $T$ よりも弱いことはあり得ないことが示せます。

$N$ 個の相異なる文字列 $S_1,\ S_2,\ \ldots,\ S_N$ が与えられます。これらを弱いほうから順に並べてください。より正確には、これら $N$ 個の文字列を並べ替えたもの $S'_1,\ S'_2,\ \ldots,\ S'_N$ のうちで、以下の条件を満たすような唯一のものを求めてください。

  • $1$ 以上 $N - 1$ 以下のすべての整数 $i$ について、$S' _i$ が $S' _{i+1}$ よりも弱い。

制約

  • $N$ は整数である
  • $2 \leq N \leq 10^5$
  • $S_i$ は英小文字からなる文字列である
  • $1 \leq |S_i| \leq 10$
  • $S_i \neq S_j \: (i \neq j)$

入力

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

$N$
$S_1$
$S_2$
$:$
$S_N$

出力

$N$ 行出力せよ。$i$ 行目には、問題文中の $S'_i$ を出力せよ。

入力例 1
8 a aac ab aaaa b aa aab aba
出力例 1
a b aa ab aab aac aba aaaa

たとえば、aacaaaa を比較すると、aaaa のほうが長さが長いので、aaaaaac よりも強いです。
また、aacaba を比較すると、長さが同じであり、aba のほうが辞書順で大きいので、abaaac よりも強いです。

入力例 2
6 assam benihuki ceylon darjeeling earlgray flavor
出力例 2
assam ceylon flavor benihuki earlgray darjeeling
入力例 3
2 tea break
出力例 3
tea break

並べ替える必要がない場合もあります。

提出
C++23 (g++ 12.2.0)