program gepeszh; const nmax=1000; const gymaxdb=5; type fnev=string[20]; {folyonev} type fnevtomb=array[1..nmax] of fnev; var n:integer; {a bemeneti file-ban ennyi folyorol van informacionk} fbe,fki:text; type tfaelemmut=^tfaelem; tfaelem=record os:tfaelemmut; nev:fnev; gy:array[1..5] of tfaelemmut; end; type tfa=tfaelemmut; var fa:tfa; gyoker:tfa; function urese(gfa:tfa):boolean; begin urese:=(gfa=nil); end; procedure gyokerhez(const gfa:tfa; var gyoker:tfa); var sfa:tfa; begin if not urese(gfa) then begin sfa:=gfa; while not(sfa^.os=nil) do begin sfa:=sfa^.os; end; gyoker:=sfa; end; end; procedure egyelemufa(const e:fnev; var gfa:tfa); var sfa:tfa; i:integer; begin sfa^.nev:=e; sfa^.os:=nil; for i:=1 to gymaxdb do begin sfa^.gy[i]:=nil end; gfa:=sfa; end; function elemszam(gfa:tfa):integer; begin if urese(gfa) then elemszam:=0 else elemszam:=1+elemszam(gfa^.gy[1])+elemszam(gfa^.gy[2])+elemszam(gfa^.gy[3])+elemszam(gfa^.gy[4])+elemszam(gfa^.gy[5]); end; procedure fileinic; begin assign(fbe,'folyo.be'); assign(fki,'folyo.ki'); rewrite(fki); end; procedure mennyiazN(var fb:text); begin reset(fb); readln(fb,n); close(fb); end; {Function FolyoSzulo(var fb:text; const gyereknev:fnev):fnev; var i:integer; s:fnev; begin i:=0; reset(fb); repeat inc(i); readln(s); until ((s=gyereknev) or ((i=n) and (s<>gyereknev)) ); if (s=gyereknev) then Folyoszulo:=gyereknev else folyoszulo:='0'; end;} procedure KiknekNincsGyerekuk(const gfa:tfa; m:integer; var fki:text); begin end; procedure KikAgyerekei(const gfa:tfa; m:integer; var fk:text); {A-feladat} var sfa:tfa; i:integer; begin {kbj} sfa:=gfa; writeln(fk,'A(z) ',sfa^.nev,' gyerekei:'); {toluk folyik hozza a viz} for i:=1 to gymaxdb do begin readln(fk,sfa^.gy[i]^.nev); end; if (sfa^.gy[m]<>nil) then kikagyerekei(sfa^.gy[m],m,fk) else if (mnil) do begin readln(fk,svf^.os^.nev); svf:=svf^.os; end; end; procedure ElemKeresFaban(const gfa:tfa; m:integer; s:fnev; var aktelem:tfa; mf:integer); var sfa:tfa; svfa:tfa; i:integer; begin if urese(gfa) then aktelem:=nil {ures a fa} else if gfa^.nev=s then aktelem:=gfa {nem ures, es megtalata} else if (sfa^.nev<>s) then begin {nem ures, es o nem az} if (sfa^.gy[1]^.nev<>s) and (sfa^.gy[2]^.nev<>s) and (sfa^.gy[3]^.nev<>s) and (sfa^.gy[4]^.nev<>s) and (sfa^.gy[5]^.nev<>s) then begin inc(mf); elemkeresfaban(sfa^.gy[m],m,s,aktelem,mf); end; end; if (aktelem=nil) then begin if (mnil} end; procedure faba_szur(var faba:tfa; const m:integer; var fat:tfa); begin faba^.gy[m]:=fat; end; function elsoszabadmut(const gfa:tfa):integer; var i:integer; begin i:=1; while (i<=gymaxdb) or (gfa^.gy[i]=nil) do inc(i); if gfa^.gy[i]=nil then elsoszabadmut:=i else elsoszabadmut:=0; end; procedure file2fa(var fb:text; var gfa:tfa); var s,s_os:fnev; svf,svf_os,svf_gy:tfa; hol:tfa; i:integer; db:integer; gys:integer; {1..5} begin reset(fbe); readln(fbe,db); {sorszamkihagy} readln(fbe,s); gfa^.nev:=s; egyelemufa(s,svf_gy); readln(fbe,s_os); egyelemufa(s_os,svf_os); faba_szur(svf_os,1,svf_gy); svf:=svf_os; {a tovabbiakban csak evvel /svf/ dolgozunk} i:=4; while (inil) then begin egyelemufa(s,svf_gy); faba_szur(hol,gys+1,svf_gy); end else begin egyelemufa(s_os,svf_os); faba_szur(svf_os,1,svf_gy); faba_szur(gfa,elsoszabadmut(gfa),svf_os); end; {if, else} end; {while} end; {file2fa} procedure kiir(var fb:text; var fk:text); var s1,s2:fnev; svf:tfa; begin reset(fb); readln(fb,s1); repeat s2:=s1; readln(fb,s1); until (eof(fb)); {...} kikagyerekei(svf,1,fk); end; begin fileinic; mennyiazN(fbe); file2fa(fbe,fa); kiir(fbe,fki); {kikagyerekei(fa,1,fki); kikazosei(fa,1,fki);} end.