// yukicoder: No.205 マージして辞書順最小 // 2019.4.15 bal4u #include #include //// 高速入力 #if 1 #define gc() getchar_unlocked() #define pc(c) putchar_unlocked(c) #else #define gc() getchar() #define pc(c) putchar(c) #endif int in() // 非負整数の入力 { int n = 0, c = gc(); do n = 10 * n + (c & 0xf), c = gc(); while (c >= '0'); return n; } int ins(char *s) // 文字列の入力 スペース以下の文字で入力終了 { char *p = s; do *s = gc(); while (*s++ > ' '); *--s = 0; return s - p; } void outs(char *s) { while (*s) pc(*s++); } #define EOS '}' int N; char S[55][55]; int w[55], top[55]; char ans[3000]; int sz; int main() { int i, N, min; N = in(); for (i = 0; i < N; i++) { w[i] = ins(S[i]), S[i][w[i]++] = EOS, S[i][w[i]] = 0; } while (1) { for (i = 0; i < N && S[i][top[i]] == EOS; i++); if (i >= N) break; min = i; for (; i < N; i++) if (S[i][top[i]] != EOS) { if (strcmp(S[min] + top[min], S[i] + top[i]) > 0) min = i; } ans[sz++] = S[min][top[min]++]; } ans[sz] = 0, outs(ans), pc('\n'); return 0; }