Program tree4;
Uses Crt;

const
  MaxNode = 255;

Type
  TTree = record
    Head,L,R: Byte;
    Date: string[20];
    jiv: boolean;
  End;

Var
  Tree: array [0..MaxNode] of TTree;
  flag: Boolean;
  node: integer;
  Strq, Strj: string;
  F: file of TTree;
  i: byte;
  MasSv, MasJiv: array [0..20] of string [20];


Procedure NewNodeL(Node: Byte; str:string; b:Boolean);
Begin
  Tree[Node].L := Tree[0].Head + 1;
  Tree[0].Head := Tree[0].Head + 1;


  Tree[Tree[0].Head].Head := Node;
  Tree[Tree[0].Head].Date := str;
  Tree[Tree[0].Head].L := 0;
  Tree[Tree[0].Head].R := 0;
  Tree[Tree[0].Head].jiv := b;
End;


Procedure NewNodeR(node: byte; str:string; b:Boolean);
var
  s:string;
Begin
  if Tree[Node].jiv then
  Begin
    NewNodeL(Node,strJ,True);
    s := Tree[Node].Date;
    Tree[Node].Date := Str;
    Tree[Node].jiv := False;
    {inc(node);}
    NewNodeR(Node, s,True);
  End
  Else
  Begin
  Tree[Node].R := Tree[0].Head + 1;
  Tree[0].head := Tree[0].Head + 1;

  Tree[Tree[0].Head].Head := Node;
  Tree[Tree[0].Head].Date := str;
  Tree[Tree[0].Head].L := 0;
  Tree[Tree[0].Head].R := 0;
  Tree[Tree[0].Head].jiv := b;

  if Not(b) then NewNodeL(Tree[0].Head,StrJ,True);
  End;
End;

{Function FindJiv(n: byte):Boolean;
var
  i:byte;
Begin
  FindJiv := False;
  for i:=0 to MasSv[0] do
    if Tree[n].Date = MasSv[i] Then Find := True;
End;

Procedure PreOrder(n: byte; k: byte);
Begin
  if FindJiv(n) then inc(k);
  if Tree[n].L <> 0 then PreOrder(Tree[n].L, k);
  If Tree[n].L <> 0 then PreOrder(Tree[n].R, k);
  If k <> 0 then MasJiv[k] := Tree[n].Date;
End;  }

Begin
  Assign(f,'/Tree.dat');
  {$i-}
  Reset(f);
  {$i+}
  if IOResult = 0 then
  Begin
    i:=0;
    While Not EOF(f) do
    Begin
      Read(f, Tree[i]);
      inc(i);
    End;
  End
  Else
  Begin
    Tree[0].Head := 0;
    NewNodeL(0,'gavkaet',False);
    NewNodeL(1,'Sobaka',True);
  End;

  ClrScr;
  WriteLn('Zagodaite jivotnoe!');
  Flag := True;
  Node := 1;


  While Flag do
  Begin
    WriteLn(Tree[Node].Date);
    WriteLn('1-Yes, 2-No, 3-Exit, 4-Save');

    Case ReadKey of
      '1': if Tree[Node].jiv = True Then
           Begin
             WriteLn('UGODAL!!!');
             WriteLn('');
             Node := 1;
           End
           Else Node := Tree[Node].L;
      '2': if Tree[Node].R = 0 then
           Begin
             WriteLN('kakoejivotnoe vi zagadali?');
             ReadLn(StrJ);
             WriteLN('chem otlichaetsa ot sobaki?');
             ReadLn(StrQ);
             NewNodeR(node,StrQ,False);
             node:=1;
             WriteLn('ZAPOMNIL');
             WriteLN('');

           End
           Else Node := Tree[Node].R;
      '3': Flag := False;
      '4': Begin
             Assign(f,'/Tree.dat');
             ReWrite(f);
             For i:=0 to Tree[0].Head do
               Write(f, Tree[i]);
             Close(f);
           End;
    End;
  End;

End.