#include
#include
#include
using namespace std;
char input[1010][22];
int n, len[1010], res[1010];
struct Node
{
vectorchild;
char val;
int cnt;
};
Node* root[30];
void fun(Node * curNode, int a, int b)
{
curNode->val = input[a][b];
curNode->cnt++;
b++;
if(b == len[a])
{
return;
}
else
{
bool ex = false;
for(int i = 0; i < curNode->child.size(); i++)
{
if(input[a][b] == curNode->child[i]->val)
{
ex = true;
fun(curNode->child[i], a, b);
break;
}
}
if(!ex)
{
Node *newNode = new Node();
newNode->cnt = 0;
fun(newNode, a, b);
curNode->child.push_back(newNode);
}
}
}
void find(Node * curNode, int a, int b)
{
if(curNode->cnt == 1)
{
printf("%c", curNode->val);
return;
}
else
{
printf("%c", curNode->val);
b++;
if(b == len[a])
{
return;
}
for(int i = 0; i < curNode->child.size(); i++)
{
if(input[a][b] == curNode->child[i]->val)
{
find(curNode->child[i], a, b);
break;
}
}
}
}
int main()
{
while(scanf("%d", &n) != EOF)
{
memset(res, 0, sizeof(res));
for(int i = 0; i < 26; i++)
{
root[i] = new Node();
root[i]->val = i + 'a';
root[i]->cnt = 0;
root[i]->child.clear();
}
for(int i = 0; i < n; i++)
{
scanf("%s", &input[i]);
len[i] = strlen(input[i]);
fun(root[input[i][0] - 'a'], i, 0);
}
for(int i = 0; i < n; i++)
{
find(root[input[i][0] - 'a'], i, 0);
printf("\n");
}
printf("\n");
}
return 0;
}