program main(input, output); const maxNodes = 75; maxLinks = maxNodes; type pathVector = array[1..maxNodes] of integer; node = record linkType: char; linkCount: integer; links: array[1..maxLinks] of integer; end; var ch: char; ret: integer; i, j: integer; done: Boolean; path: pathVector; src, dst: integer; network: array[1..maxNodes] of node; function pathTo(src: integer; dst: integer; pathCount: integer; var path: pathVector):integer; var i: integer; ret: integer; loop: Boolean; shortest: integer; newPath: pathVector; begin pathTo := -1; if (src = dst) then begin if (network[src].linkType = 'c') then begin pathTo := 1; path[pathCount] := dst; end else begin { attempt to route to a router } pathTo := -1; end; end else if (pathCount <> 1) and (network[src].linkType <> 'r') then begin { attempt to use end-node as a router } pathTo := -1; end else begin pathTo := -1; loop := false; for i := 1 to pathCount do begin if (path[i] = src) then begin loop := true; end; end; if (not loop) then begin shortest := maxNodes; for i := 1 to network[src].linkCount do begin newPath := path; newPath[pathCount] := src; ret := pathTo(network[src].links[i], dst, pathCount+1, newPath); if (ret > 0) and (ret < shortest) then begin shortest := ret; pathTo := shortest + 1; path := newPath; end; end; end; end; end; begin for i := 1 to maxNodes do begin network[i].linkType := 'd'; network[i].linkCount := 0; end; { read network configuration } done := false; repeat read(ch, src); if (src < 0) then begin done := true; readln; end else begin network[src].linkCount := 0; network[src].linkType := ch; while not eoln(input) do begin read(dst); network[src].linkCount := network[src].linkCount + 1; network[src].links[network[src].linkCount] := dst; end; readln; end; until done; { now read routing requests } done := false; repeat readln(src, dst); if ((src < 0) or (dst < 0)) then begin done := true; end else if network[src].linkType = 'd' then begin writeln('no node ', src:1); end else if network[dst].linkType = 'd' then begin writeln('no node ', dst:1); end else begin ret := pathTo(src, dst, 1, path); if (ret > 0) then begin for i := 1 to ret do begin write(path[i]:1, ' '); path[i] := -1; end; writeln; end else begin writeln('no route from node ', src:1, ' to ', dst:1); end; end; until done; end.