(* Problem Etaoin Shrdlu ** Algorithm Straight-Forward ** Runtime O(n) ** Author Walter Guttmann ** Date 12.05.2001 *) program etaoin; var f: Text; s: String; lastChar: Char; validLastChar: Boolean; n, i, j, top, mi, mj, mf, total: Longint; freq: array [Char] of array [Char] of Longint; begin Assign (f, 'etaoin.in'); Reset (f); ReadLn (f, n); while n <> 0 do begin for i := 0 to 127 do for j := 0 to 127 do freq[Chr(i)][Chr(j)] := 0; total := 0; validLastChar := False; for i := 1 to n do begin ReadLn (f, s); if Length (s) > 0 then begin if validLastChar then begin freq[lastChar][s[1]] := freq[lastChar][s[1]] + 1; total := total + 1 end; validLastChar := true; lastChar := s[Length(s)]; if Length(s) > 1 then for j := 1 to Length(s)-1 do begin freq[s[j]][s[j+1]] := freq[s[j]][s[j+1]] + 1; total := total + 1 end end end; for top := 1 to 5 do begin mf := 0; for i := 0 to 127 do for j := 0 to 127 do if freq[Chr(i)][Chr(j)] > mf then begin mi := i; mj := j; mf := freq[Chr(i)][Chr(j)] end; WriteLn (Chr(mi), Chr(mj), ' ', mf, ' ', (mf/total):0:6); freq[Chr(mi)][Chr(mj)] := 0 end; WriteLn; ReadLn (f, n) end; Close (f) end.