procedure main() longest(".") # needs a single character seed to throw away end procedure longest(Longest) Line := read() | return Longest # read until we can return the longest strings if Line[*Longest] then Longest := Line # prime/reset Longest Longest := longest(Longest) # use stack to hold multiples if Line[*Longest] then write(Line) # write only longest strings, # Line must be at least as long as Longest return Longest # feed back longest for length end