program longestSeqPalindrom; type stringArray = array [1..100] of string; var noValues : integer; values : stringArray; start : integer; len : integer; procedure readData(var n : integer; var v : stringArray); //reads a vector of strings //data: - (reading subalgorithm) //results: a vector of strings and its length var i : integer; begin write('no of elements, n = '); readln(n); for i := 1 to n do begin write('element from position ', i, ' is: '); readln(v[i]); end; end; procedure printData(n : integer; v : stringArray; start : integer; len : integer); //prints a vector of integers //data: a vector of strings and its length //res: - (printing subalgorithm) var i : integer; begin write('longest sequence of palindrom words is: '); for i := start to start + len - 1 do write(v[i], ' '); end; function isPalindrom(s : string) : boolean; //checks if a string is palindrom or not //data: a string //res: true, if the string is palindrom // false, otherwise var ok : boolean; i : integer; begin ok := true; i := 1; while ((i <= length(s)/2) and (ok = true)) do begin if (s[i] <> s[ length(s) - i + 1]) then ok := false else i := i + 1; end; isPalindrom := ok; end; function aSequence(n : integer; v : stringArray; start : integer) : integer; //search a sequence of prime numbers that start on position //start in vector of integer v //data: a vector and its length and a start position //res: the length of the identified sequence of prime numbers var l : integer ; i : integer; begin l := 1; i := start + 1; while ((i <= n) and (isPalindrom(v[i]) = true)) do begin i := i + 1; l := l + 1; end; aSequence := l; end; procedure longestSeq(n : integer; v : stringArray; var start : integer; var len : integer); //identify the longest seq of prime numbers //data: a vector of integers and its length //res: the longest seq o prime numbers var i : integer; crtLength : integer; begin i := 1; len := 0; while ( i <= n) do begin if (isPalindrom(v[i]) = true) then crtLength := aSequence(n, v, i) else crtLength := 0; if (crtLength > len) then begin len := crtLength; start := i; i := i + len - 1; end else if (crtLength > 0) then i:= i + crtLength - 1 else i := i + 1; end; end; begin start := 0; len := 0; readData(noValues, values); longestSeq(noValues, values, start, len); printData(noValues, values, start, len); readln(); end.