#include <iostream>
#include <sstream>
#include <cstring>
#include <string>
using namespace std;
int i_sign = 0;
string s_list[7000];
char s_list1[7000][200];
char s_list2[7000][200];
void print_node() {
for (int i = 0; i < i_sign; i++) {
int min = 0;
while (s_list[min][0] == '&') {
min++;
}
for (int j = 0; j < i_sign ; j++) {
if ((s_list[j][0] != '&') &&
( strlen(s_list2[j]) < strlen(s_list2[min])
|| strcmp(s_list2[j], s_list2[min]) < 0 &&
strlen(s_list2[j]) == strlen(s_list2[min])
|| (strcmp(s_list2[j], s_list2[min]) == 0 &&
strcmp(s_list1[j], s_list1[min]) < 0))) {
min = j;
}
}
cout << s_list[min] << endl;
s_list[min][0] = '&';
}
}
int main() {
string str1;
while ( getline(cin, s_list[i_sign])) { // 注意 while 处理多个 case
str1 = s_list[i_sign];
if (str1.empty())break;
int i = 0, j = 0, m = 0, k = 0;
while (i < str1.length()) {
if (str1[i] == ' ') {
k++;
while (str1[i] == ' ' && i < str1.length())
i++;
}
if (k < 3)
s_list1[i_sign][j++] = str1[i];
else
s_list2[i_sign][m++] = str1[i];
i++;
};
i_sign++;
}
print_node();
return 0;
}
// 64 位输出请用 printf("%lld")