#include <bits/stdc++.h>
using namespace std;
int T, q, n, t[3000005][65], cnt[3000005], idx;
char s[3000005];
int getnum(char x) {
if (x >= 'A' && x <= 'Z')
return x - 'A';
else if (x >= 'a' && x <= 'z')
return x - 'a' + 26;
else
return x - '0' + 52;
}
void insert(char str[]) {
int p = 0, len = strlen(str);
for (int i = 0; i < len; i++) {
int c = getnum(str[i]);
if (!t[p][c])
t[p][c] = ++idx;
p = t[p][c];
}
cnt[p]++;
}
int find(char str[]) {
int p = 0, len = strlen(str);
for (int i = 0; i < len; i++) {
int c = getnum(str[i]);
if (!t[p][c])
return 0;
p = t[p][c];
}
return cnt[p];
}
void pr(int node, string& cur) {
while (cnt[node] > 0) {
cout << cur << endl;
cnt[node]--;
}
for (int i = 0; i < 65; i++) {
if (t[node][i] != 0) {
char ch = ' ';
if (i < 26) {
ch = 'A' + i;
} else if (i < 52) {
ch = 'a' + i - 26;
} else {
ch = '0' + i - 52;
}
cur.push_back(ch);
pr(t[node][i], cur);
cur.pop_back();
}
}
}
int main()
{
scanf("%d", &n);
for (int i = 0; i <= idx; i++)
for (int j = 0; j <= 122; j++)
t[i][j] = 0;
for (int i = 0; i <= idx; i++)
cnt[i] = 0;
idx = 0;
for (int i = 1; i <= n; i++)
{
scanf("%s", s);
insert(s);
}
// 输出字典树的先序遍历结果
string cur = "";
pr(0, cur);
return 0;
}