function GetWordFromMaxLineOf(n: integer; const file_name: string): string; type TWordStr = string[100]; TDelimiter = set of Char; PTItem = ^TItem; TItem = record Data: TWordStr; next: PTItem; end; TWordList = record first, last: PTItem; end; procedure InsertWord(var L: TWordList; s: string); var p: PTItem; begin New(p); p^.Data := s; p^.next := nil; if L.first = nil then L.first := p else L.last^.next := p; L.last := p end; procedure InitList(var L:TWordList); begin L.first := nil; L.last := nil; end; procedure DeleteList(var L: TWordList); var T: PTItem; begin while L.first <> nil do begin T := L.first; L.first := L.first^.next; dispose(T); end; L.last := nil; end; function GetWords(s: string; var L: TWordList; delimiters: TDelimiter): Byte; var i, p: Byte; begin for i := 1 to Length(s) do if s[i] In delimiters then s[i] := #32; repeat p := Pos(' ', s); if p > 0 then Delete(s, p, 1) until p = 0; if s <> '' then begin if s[1] = ' ' then Delete(s, 1, 1); if s[Length(s)] = ' ' then Delete(s, Length(s), 1); end; i := 0; repeat p := Pos(' ', s); Inc(i); if p > 0 then begin InsertWord(L, Copy(s, 1, Pred(p))); Delete(s, 1, p) end else InsertWord(L, s) until p = 0; GetWords := i end; const limits: TDelimiter = [',', '.', '!', '\', '/', '?']; var f: text; s, res: string; list, max_list: TWordList; i, words, max_words: integer; p: PTItem; begin assign(f, file_name); reset(f); max_words := 0; InitList(list); InitList(max_list); while not eof(f) do begin readln(f, s); words := GetWords(s, list, limits); if words > max_words then begin DeleteList(max_list); max_list := list; InitList(list); max_words := words; end else DeleteList(list); end; close(f); p := max_list.first; while (n > 1) and (p <> nil) do begin dec(n); p := p^.next; end; if p = nil then GetWordFromMaxLineOf := '' else GetWordFromMaxLineOf := p^.data; DeleteList(max_list); end; begin writeln(GetWordFromMaxLineOf(4, 'data.txt')); end.