#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NAMLEN 80
typedef struct {
int day;
int month;
int year;
} Date;
typedef struct {
char name[NAMLEN];
char first[NAMLEN];
Date birth;
} Person;
typedef struct {
Person *data;
List *next;
} List;
int getrecord(char *nbuf, char *fbuf, int *y, int *m, int *d)
{
return scanf("%s %s %d.%s.%d", nbuf, fbuf, y, m, d) == 5;
}
int main() {
char nbuf[NAMLEN];
char fbuf[NAMLEN];
int y, m, d;
List* first = 0;
List* curr = 0;
List* last = 0;
List* add = 0;
Person* p, old;
while ( getrecord(nbuf, fbuf, &y, &m, &d) ) {
add = malloc(sizeof(List));
add->data = p = malloc(sizeof(Person));
add->next = 0;
strcpy(p->name, nbuf);
strcpy(p->first, fbuf);
p->birth.year = y;
p->birth.month = m;
p->birth.day = d;
if ( first = 0 ) {
first = add;
} else {
curr = first;
last = 0;
while ( curr ) {
old = curr->data;
if ((strcmp(p->name, old->name) < 0) ||
((strcmp(p->name, old->name) == 0) &&
(strcmp(p->first, old->first) <= 0))) {
break;
}
last = curr;
curr = curr->next;
}
add->next = curr;
if ( last) {
last->next = add;
} else {
first = add;
}
}
}
curr = first;
while ( curr ) {
p = curr->data;
printf("%s %s %d.%d.%d\n", p->name, p->first,
p->birth.year, p->birth.month, p->birth.day);
last = curr;
curr = curr->next;
free(p);
free(last);
}
return 0;
}