반복되는 플레이리스트

원형으로 이어진 N개의 음이 주어질 때, 각 곡은 하나의 장음계에 속하는 두 음 이상의 연속 구간이다. 이 고리를 덮는 곡 수의 최솟값을 구한다.

보통7그리디문자열 매칭수학구현아직 제출이 없습니다시간 제한1.5초메모리 제한512 MB

문제

한 지역 라디오 방송국의 장비가 고장 나서 같은 플레이리스트를 계속 반복 재생하고 있다. 음 높이를 인식하는 프로그램이 있으니, 이 플레이리스트에 들어 있는 곡 수의 하한을 구해 보자.

반복 구간을 한 바퀴 전부 녹음했다. 녹음은 플레이리스트의 임의의 지점에서 시작해 같은 지점에서 끝난다. 따라서 마지막 음 다음에는 다시 첫 번째 음이 이어지고, 한 곡이 녹음의 끝과 처음에 걸쳐 있을 수도 있다. 프로그램은 인식한 음 NN개를 연주된 순서대로 출력한다.

음 이름은 Do, Do#, Re, Re#, Mi, Fa, Fa#, Sol, Sol#, La, La#, Si의 12가지다. 이 목록에서 이웃한 두 음의 간격을 반음이라고 한다. 반음 12개만큼 떨어진 두 음은 이름이 같다. 그래서 Si 다음 음의 이름은 다시 Do다.

한 곡은 음 두 개 이상으로 이루어지고, 한 곡에 나오는 음은 모두 같은 장음계에 속한다.

장음계는 으뜸음 하나로 정해지며 음 여덟 개로 이루어진다. 그중 이름이 서로 다른 음은 일곱 개다. 으뜸음에서 음계의 각 음까지의 간격은 차례로 반음 0, 2, 4, 5, 7, 9, 11, 12개다. 첫 음과 마지막 음은 으뜸음과 이름이 같다. 어떤 음이든 으뜸음으로 삼아 장음계를 만들 수 있다. 예를 들면 다음과 같다.

으뜸음 +0으뜸음 +2으뜸음 +4으뜸음 +5으뜸음 +7으뜸음 +9으뜸음 +11으뜸음 +12
Do 장조DoReMiFaSolLaSiDo
Do# 장조Do#Re#FaFa#Sol#La#DoDo#
Re 장조ReMiFa#SolLaSiDo#Re
Re# 장조Re#FaSolSol#La#DoReRe#
Mi 장조MiFa#Sol#LaSiDo#Re#Mi
이하 생략

녹음에 들어 있을 수 있는 곡 수의 최솟값 MM을 구하여라.

입력

첫째 줄에 인식한 음의 개수 NN이 주어진다 (2N100000002 \le N \le 10\,000\,000).

다음 NN개 줄에 음 이름이 연주된 순서대로 한 줄에 하나씩 주어진다. 음 이름은 위에 적은 그대로, 첫 글자만 대문자이고 나머지는 소문자다. 녹음은 항상 조건을 만족하는 플레이리스트에서 나온 것이다.

출력

첫째 줄에 MM을 출력한다.