Problem D: Genealogical Research

These days, everyone seems to be exploring their ancestry. This effort is supported by family history software, now marketed by a number of vendors. Unfortunately this software is expensive and runs only on the McDoze X operating system. You are to write an open-source equivalent.

Your program accepts a series of commands, one per line. The commands are described by the following syntax:

   command ::= birth
           ::= death
           ::= ancestors
           ::= descendants 
           ::= QUIT
   
   birth ::= BIRTH child: date: mother: father

   death ::= DEATH person: date

   ancestors ::= ANCESTORS person

   descendants ::= DESCENDANTS person
   
   child ::= name

   mother ::= name

   father ::= name

   person ::= name

   date ::= name

   name ::= <<any sequence of characters not beginning or ending
                       with a space or containing a colon>>
Spaces in the input are ignored except where they appear within name. The BIRTH and DEATH commands record the birth and death of an individual. You may assume that each individual has a unique name. The ANCESTORS and DESCENDANTS commands are queries: they print a family tree or a reverse family tree for the named person, using the BIRTH and DEATH information entered by previous commands. The QUIT command indicates the end of input.

The BIRTH, DEATH, and QUIT commands have no output. For each ANCESTORS (DESCENDANTS) command, print the following information:

Leave an empty line between the output sequences for successive commands.

You may assume that no input line exceeds 100 characters, and that there are not more than 250 lines of input. You may assume that DEATH, ANCESTORS, and DESCENDANTS commands refer to a name for which a BIRTH command has previously been given. QUIT appears only as the last line of input.

Some BIRTH commands may give the same parent as mother and father. In an ANCESTOR listing for such people, your output should give the ancestry information for the same person twice: once as the mother and once as the father.

Sample Input

BIRTH John Doe : January 7, 1599 : Jane Doe : Adam Doe
BIRTH Mary Worth : May 18, 1666 : Jane Doe : Adam Doe
BIRTH Casper Ghost : Jan 2, 1959 : Mary Worth : John Doe
DEATH Mary Worth : Jan 3, 1959
ANCESTORS Casper Ghost
DESCENDANTS John Doe
QUIT

Output for Sample Input

ANCESTORS of Casper Ghost
  John Doe January 7, 1599 -
    Adam Doe
    Jane Doe
  Mary Worth May 18, 1666 - Jan 3, 1959
    Adam Doe
    Jane Doe

DESCENDANTS of John Doe
  Casper Ghost Jan 2, 1959 -

G. V. Cormack