#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;
}