암호 분석에서는 어떤 언어에서 개별 글자와 글자 시퀀스가 얼마나 자주 나타나는지가 매우 중요한 단서가 된다. 예를 들어 영어 문장에서는 E, L, N, R, S, T가 가장 자주 쓰이는 글자들이며, 자주 나타나는 두 글자·세 글자 조합 등을 알면 암호문에 대해 훨씬 많은 것을 알아낼 수 있다.
텍스트 한 덩어리를 읽어 글자 시퀀스 빈도를 분석하는 프로그램을 작성하라. 길이가 1부터 5까지인 각 시퀀스 길이에 대해, 빈도가 높은 상위 다섯 개에 해당하는 시퀀스들을 보고한다. 즉 가장 자주 나타나는 한 글자들, 두 글자 조합들, …, 다섯 글자 조합들까지 각각 상위 다섯 개의 빈도를 보고한다.
알파벳 문자가 연속으로 이어진 구간만 고려하며, 대소문자는 구분하지 않는다(a와 A는 같은 글자로 취급). 길이가 $L$인 시퀀스란 이러한 알파벳 구간 하나 안에 완전히 포함되는, 연속된 $L$개의 글자를 말한다. 시퀀스는 알파벳이 아닌 문자를 가로질러 이어지지 않는다.
입력은 임의 길이의 텍스트 한 덩어리이며, 여러 줄에 걸쳐 있을 수 있다. 파일 끝까지 모두 읽는다. 텍스트에는 글자·숫자·문장 부호·공백이 섞여 있을 수 있다.
길이 1부터 5까지 각 시퀀스 길이마다 한 구획씩 출력한다. 각 구획은 다음 머리글 줄로 시작한다.
Analysis for Letter Sequences of Length L
그다음 줄에는 머리글과 같은 길이의 대시(-)를 41개 출력한다. 이어서 해당 길이에 대해 빈도를 내림차순으로, 서로 다른 상위 다섯 개 빈도까지만 출력한다. 각 빈도마다 다음과 같이 출력한다.
Frequency = F, Sequence(s) = (S1,S2,...)
여기서 S1, S2, …는 정확히 $F$번 나타나는 모든 시퀀스이며, 대문자로 쓰고 공백 없이 쉼표로 구분하며 사전순으로 나열한다. 어떤 길이의 서로 다른 빈도가 다섯 개보다 적으면 존재하는 만큼만 출력한다(하나도 없을 수 있다). 서로 다른 길이 구획 사이는 빈 줄 하나로 구분한다.