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