program collection (input,output); const MAXCELLS= 50; MAXPTR = 2; EMPTYPTR = 0; var graph: array[1..MAXCELLS,1..MAXPTR] of integer; mark: array[1..MAXCELLS] of boolean; numCells: integer; procedure readCells; var i, p, fromCell, ptr, toCell: integer; begin readln(numCells); for i := 1 to numCells do begin for p := 1 to MAXPTR do begin graph[i,MAXPTR] := EMPTYPTR; end; end; readln(fromCell, ptr, toCell); while (fromCell <> 0) do begin graph[fromCell,ptr] := toCell; readln(fromCell, ptr, toCell); end; end; procedure markCell(cell : integer); var i, dest : integer; begin for i := 1 to MAXPTR do begin dest := graph[cell,i]; if (dest <> EMPTYPTR) and (mark[dest] = false) then begin mark[dest] := true; markCell(dest); end; end; end; procedure findReachable; var i:integer; begin mark[1] := true; for i := 2 to numCells do begin mark[i] := false; end; markCell(1); end; procedure printGarbage; var i:integer; begin write('Garbage cells: '); for i := 2 to numCells do begin if mark[i] = false then begin write(i:3); end; end; writeln; end; begin readCells; findReachable; printGarbage; end.