/*
#include <stdio.h>
int su[100005]={0};
int f(int n)
{
if(n==1)
{
return su[n]=1;
}
if(su[n]==0)
{
if(n%2==0)
{
return su[n]=f(n/2)+1;
}
else
{
return su[n]=f(3*n+1)+1;
}
}
else
{
return su[n];
}
}
int main()
{
int a, b;
int i, j, x, y;
scanf("%d %d", &a, &b);
for(i=a; i<=b; i++)
{
f(i);
}
x=su[a+1];
for(i=a+1; i<b; i++)
{
if(x<su[i])
{
x=su[i];
y=i;
}
}
printf("%d %d", y, x);
}
*/
/*
#include<stdio.h>
struct _node {
int a, b, c;
char f;
double z;
};
typedef struct _code {
int a, b, c;
} CODE;
int main() {
struct _node x;
struct _node y;
struct _node t;
CODE a;
x.a = 10;
x.b = 11;
x.c = 12;
y.a = 50;
y.b = 51;
y.c = 52;
printf("%d %d %d\n",x.a, x.b, x.c);
printf("%d %d %d\n", y.a, y.b, y.c);
t = x;
x = y;
y = t;
printf("%d %d %d\n",x.a, x.b, x.c);
printf("%d %d %d\n", y.a, y.b, y.c);
}
*/
/*
#include<stdio.h>
struct _node
{
int a, b;
};
int main()
{
int n;
int i, j;
int tu[105]= {0};
struct _node su[105]= {0}, x;
scanf("%d", &n);
for(i=0; i<n; i++)
{
scanf("%d %d", &su[i].a, &su[i].b);
}
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
if(i<j)
{
if(su[i].a > su[j].a)
{
x=su[i];
su[i]=su[j];
su[j]=x;
}
}
else if(j<i)
{
if(su[i].a<su[j].a)
{
x=su[i];
su[i]=su[j];
su[j]=x;
}
}
}
}
for(i=0; i<n; i++)
{
printf("%d %d\n", su[i].a, su[i].b);
}
}
*/
//
//#include<stdio.h>
//struct _node
//{
// int a, b;
//};
//
//
//int main()
//{
// int n, i, j;
// struct _node su[105]={0}, x;
//
// scanf("%d", &n);
//
// for(i=0; i<n; i++) {
// scanf("%d %d", &su[i].a, &su[i].b);
// }
//
// for(i=0; i<n; i++) {
// for(j=0; j<n-1; j++) {
// if(su[j].a > su[j+1].a) {
// x = su[j];
// su[j] = su[j+1];
// su[j+1] = x;
// }
// }
// }
// for
//}
// strcmp : string comparison
/*
#include<stdio.h>
struct _node
{
int a, b, c;
char name[100];
};
int main()
{
int n, i, j, y, x, p=1, q=1;
struct _node su[105]= {0};
scanf("%d", &n);
for(i=0; i<n; i++)
{
scanf("%s %d %d %d", su[i].name, &su[i].a, &su[i].b, &su[i].c);
}
x=su[0].a;
for(i=0; i<n; i++)
{
if(x<su[i].a)
{
x=su[i].a;
y=i;
}
}
for(i=0; i<n; i++)
{
if(su[y].b<su[i].b)
{
p+=1;
}
if(su[y].c<su[i].c)
{
q+=1;
}
}
printf("%s ", su[y].name);
printf("%d %d", p, q);
}
*/
#include<stdio.h>
#include<string.h>
struct _node
{
char name[105];
int yr, mt, dy;
int res;
};
int main()
{
int n, i, j, k;
int y;
int p=0, q=0, r, s;
struct _node su[1005]= {0}, x, z;
scanf("%d", &n);
/*
///========================================
for(i=0; i<n; i++)
{
scanf("%s %d %d %d", &su[i].name, &su[i].yr, &su[i].mt, &su[i].day);
}
*/
for(i=0; i<n; i++)
{
scanf("%s %d %d %d", su[i].name, &su[i].yr, &su[i].mt, &su[i].dy);
su[i].res=su[i].yr*10000 + su[i].mt*100 + su[i].dy;
}
for(i=0; i<n; i++)
{
for(j=0; j<n-1; j++)
{
// if(strcmp(su[j].name, su[j+1].name)==1)
if(su[j].res>su[j+1].res)
{
x=su[j];
su[j]=su[j+1];
su[j+1]=x;
}
}
}
for(i=0; i<n; i++)
{
p = i;
q = i;
for(j=i; j<n ; j++)
{
if(su[i].res != su[j].res)
{
break;
}
q = j;
}
if(p!=q)
{
for(j=p; j<q; j++)
{
for(k=p; k<q; k++)
{
if(strcmp(su[k].name, su[k+1].name)==1) {
x = su[k];
su[k] = su[k+1];
su[k+1] = x;
//printf("%d %s %s\n", i, su[k].name, su[k+1].name);
}
/*
if(strlen(su[k].name) > strlen(su[k+1].name))
{
x = su[k];
su[k] = su[k+1];
su[k+1] = x;
}
*/
}
}
}
i = q;
}
for(i=0; i<n; i++)
{
printf("%s\n", su[i].name);
}
}
//#include<stdio.h>
//
//int main() {
// char word1[1000] = {0}, word2[1000] = {0};
//
// scanf("%s %s", word1, word2);
//
// printf("%d", strcmp(word1, word2));
//}
//