#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include <algorithm>
#include<sstream>
#include<string>

using namespace std;
const int N = 10010;

bool compare(const string& str1, const string& str2) {
    //要想排序需要先把时间读出来
    //而要读出时间就可以用sstring
    stringstream ss1(str1);
    stringstream ss2(str2);
    string sa[4];//用sstring把字符都读入字符数组里也很方便操作
    string sb[4];
    for (int i = 0; i < 4; i++) {
        ss1 >> sa[i];
        ss2 >> sb[i];
    }

    string day1 = sa[1] + sa[2];
    string day2 = sb[1] + sb[2];
    //因为day1和day2长度是一样长的,所以可以直接用字典序比大小
    //由于所花时间的长度不一样,所以不能用字典序比较大小
    //这是可以用sscanf来读取数据
    double time1, time2;
    sscanf(sa[3].c_str(), "%lf(s)", &time1);
    sscanf(sb[3].c_str(), "%lf(s)", &time2);
    //现在所有准备条件都做好了
    if (time1 != time2) {
        return time1 < time2;
    }
    else
        return day1 < day2;
}
int main()
{
    //本题你就一行行的读到时候输出也好输出
    //不一定非要读到结构体中,读到数组中也很好排序
    string tmp;
    string str[N];
    //sstring能让你像cin一样使用 
    int i = 0;
    while (getline(cin, tmp)) {
        str[i] = tmp;
        i++;
    }
    
    //读完所有数据之后就要开始排序了
    sort(str, str + i, compare);
    //然后将数组中所存的值按序输出就行
    for (int j = 0; j< i; j++) {
        cout << str[j] << endl;
    }
    return 0;
}