#include <bits/stdc++.h>
#include <sstream>
using namespace std;
int idx=0;
struct d
{
    string name;
    string start_time;
    string last_time;
};
//两个冒泡排序,保证稳定性
void sortbystart(d rizhi[])
{
    for(int i=1;i<idx;i++)
    {
        for(int j=0;j<idx-i;j++)
        {
            if(rizhi[j].start_time>rizhi[j+1].start_time)
            {
                swap(rizhi[j],rizhi[j+1]);
            }
        }
    }
}
void sortbyconsume(d rizhi[])
{
    for(int i=1;i<idx;i++)
    {
        for(int j=0;j<idx-i;j++)
        {
            if(rizhi[j].last_time>rizhi[j+1].last_time)
            {
                swap(rizhi[j],rizhi[j+1]);
            }
        }
    }
}
int main() {
    string s;
    d rizhi[100000];
    while(getline(cin,s))
    {
        rizhi[idx].name=s;
        stringstream ss(s);
        string n,t1,t2,l,t;
        int index=0;
        while(ss>>t)
        {
            if(index==1) t1=t;//年月日
            if(index==2) t2=t;//时分秒毫秒
            if(index==3) l=t;//消耗时间
            index++;
        }
        //
        rizhi[idx].start_time=t1+t2;
        rizhi[idx].last_time=l;
        idx++;
    }
    //处理一下消耗时间
    int maxs=0;
    for(int i=0;i<idx;i++)
    {
         if(maxs<rizhi[i].last_time.length())
         {
            maxs=rizhi[i].last_time.length();
         }
    }
    //缺的补零
    //比如字符串91.11直接和字符串211.22比肯定是后者小,我们在短的前面补充合适的数量的0即可
    for(int i=0;i<idx;i++)
    {
         if(rizhi[i].last_time.length()<maxs)
         {
            rizhi[i].last_time.insert(0,maxs-rizhi[i].last_time.length(),'0');
         }
    }
    //开始排序
    //先根据开始时间排序
    sortbystart(rizhi);
    sortbyconsume(rizhi);
    for(int i=0;i<idx;i++)
    {
        cout<<rizhi[i].name<<endl;
    }
}
// 64 位输出请用 printf("%lld")