#include <iostream>
using namespace std;
#include <stdlib.h>
#include "String.h"
#include "Person6.h"
#include "Date5.h"

typedef Person *data_t;
#include "List7.h"

/* -- read on input record and return success/error -- */

bool getrecord(String& nbuf, String& fbuf, int& y, int& m, int& d)
{
  char sep;
  return (cin >> nbuf >> fbuf >> y >> sep >> m >> sep >> d);
}

int main() {
  String nbuf;
  String fbuf;
  int y, m, d, fail;
  List persons;
  Person* p, *old;
  Date silvester(31, 12);

  /* -- read persons from stdin -- */
  while ( getrecord(nbuf, fbuf, y, m, d) ) {
    /* -- construct new person record -- */
    p = new Person(nbuf, fbuf, d, m, y);

    /* -- add to list (and sort them already at insertion time) -- */
    for ( fail = persons.find_first(); !fail; fail = persons.find_next() )
    {
      old = persons.retrieve();
      if (*p <= *old) {
        break;
      }
    }

    /* -- insert at right place -- */
    if ( fail )
      persons.insert_after(p);
    else
      persons.insert_before(p);
  }

  /* -- print out sorted list and delete list -- */
  persons.find_first();
  while ( !persons.empty() ) {
    p = persons.retrieve();
    cout << p->lastName() << ' ' << p->firstName() << ' ' <<
            p->birthday() << ", Alter: " << silvester - p->birthday() <<
            " Tage" << endl;
    persons.remove();
    delete p;
  }
  return 0;
}