PROGRAM Graph(INPUT, OUTPUT); TYPE NodeTyp = ^NodeRec; NodeRec = RECORD Value: CHAR; Neigh: ArcType; END ; ArcTyp = ^ArcRec; ArcRec = RECORD Chld: NodeTyp; Next: ArcTyp; END ; GraphTyp = ARRAY ['A'..'Z'] of NodeTyp ; PROCEDURE AddArc(VAR G: GraphTyp; Frum, Too: CHAR); VAR X: ArcTyp; N: NodeTyp; Done: Boolean; BEGIN X := G[From]^.Neigh; Done := FALSE; WHILE NOT(DONE) DO BEGIN IF X = NIL THEN DONE := TRUE ELSE IF X^.Chld^.Value >= Too THEN DONE := TRUE ELSE X := X^.Next END ; IF X = NIL THEN BEGIN NEW(N); PROCEDURE MAIN; VAR G: GraphTyp; X: NodeTyp; C, D: CHAR; BEGIN FOR C := 'A' TO 'Z' DO BEGIN NEW(X); X^.Value := C; X^.Neigh := NIL; G[C] := X END ; WHILE NOT EOF(INPUT) DO BEGIN READ(INPUT, C); GET(INPUT); GET(INPUT); READ(INPUT, D); AddArc(G, C, D) END ; END { MAIN } ; BEGIN MAIN; END {Graph} .