#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")