만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

피아노 연주

시간 제한1초메모리 제한256 MB

요약
두 손가락의 시작 음과 악보의 음 순서가 주어질 때, 손가락들이 움직이는 반음 수의 합을 최소로 하고 각 음을 어느 손가락으로 연주할지 구합니다.
난이도

보통10점 중 6점

유형
동적 계획법, 구현
정답자
아직 제출이 없습니다

문제

음악 용어에서 '음계'는 음을 낮은 음부터 높은 음 순으로 나열한 음의 층계이다. '음정'은 두 음 사이의 거리를 뜻한다. 서양 음악에서 한 옥타브는 12음계 {A, A#, B, C, C#, D, D#, E, F, F#, G, G#}로 구성된다.

피아노 건반에서 한 옥타브 안에는 흰 건반 7개와 검은 건반 5개, 총 12개의 건반이 있다. 인접한 두 건반의 음정은 항상 '반음'이다. '#'는 음을 반음 높인다는 뜻이다. 위 그림은 맨 왼쪽 C0부터 시작하여 낮은 음에서 높은 음 순서로 건반이 나열된 모습이다.

옥타브는 0옥타브부터 센다. 예를 들어 C2는 2옥타브의 C 음이고, A8#은 8옥타브의 A 음을 반음 높인 음이다. 따라서 C0에서 C1까지는 12반음이고, B0에서 E1까지는 5반음이다. 현대의 표준 피아노에는 흰 건반 52개와 검은 건반 36개, 총 88개의 건반이 있으며 음역은 A0부터 C8까지이다. 그러나 이 문제에서는 건반이 C0부터 시작하여 음이 높아지는 방향으로 무한히 이어진다고 가정한다.

민정이는 요즘 왼손 검지와 오른손 검지, 두 손가락만으로 칠 수 있는 단순한 피아노 악보를 연주하고 있다. 민정이는 연주할 때 손가락을 되도록 적게 움직이고 싶어 한다. 이때 손가락의 이동 거리는 두 음의 음정으로 정한다.

예를 들어 왼손 검지와 오른손 검지가 각각 C0와 A0 위에 있고, 다음으로 G0을 쳐야 한다고 하자. C0와 G0는 7반음 떨어져 있으므로 왼손 검지로 치면 7만큼 이동한다. A0와 G0는 2반음 떨어져 있으므로 오른손 검지로 치면 2만큼 이동한다.

민정이는 음 하나를 반드시 손가락 하나로 연주한다. 두 손가락은 서로 엇갈린 위치에 놓일 수 있다. 악보에 두 음 이상을 동시에 누르는 경우는 없으며, 음은 항상 순서대로 한 음씩 연주한다. 악보를 연주하는 데 무리가 없을 만큼 팔이 충분히 길다고 가정한다.

두 손가락의 처음 건반 위치와 피아노 악보가 주어질 때, 민정이가 악보를 끝까지 연주하기 위해 두 손가락이 이동해야 하는 거리의 최솟값을 구하는 프로그램을 작성하라.

입력

첫 번째 줄에 처음에 왼손 검지와 오른손 검지가 올라 있는 건반 위의 음이 차례대로 공백으로 구분되어 주어진다. 이때 두 음의 음정은 1 이상이다.

두 번째 줄에는 양의 정수 NN이 주어진다.

세 번째 줄에는 악보가 주어진다. NN개의 음이 순서대로 공백으로 구분되어 있다.

출력

첫 번째 줄에 악보를 끝까지 연주하기 위해 두 손가락이 이동한 총 거리를 출력한다. 두 번째 줄에는 NN개의 음을 연주한 방법을 공백으로 구분하여 출력한다. ii번째 음(1≤i≤N1 \le i \le N)을 왼손 검지로 누른 경우 1을, 오른손 검지로 누른 경우 2를 출력한다.

제한

음은 XXy 또는 XXy# 형식의 2이상 3이하 길이의 문자열로 주어진다. 여기서 XX는 'A'부터 'G' 사이의 알파벳 대문자 중 하나이고, y는 음이 아닌 정수이다(0≤y≤90 \le y \le 9).

예제3

  1. 예제 1

    입력
    C0 A0
    3
    G0 E0# B0#
    
    예상 출력
    11
    2 2 2
    
  2. 예제 2

    입력
    C1# G0
    2
    G0 C1#
    
    예상 출력
    0
    2 1
    
  3. 예제 3

    입력
    A0 B0
    4
    C1 D1# C1# A0#
    
    예상 출력
    7
    2 2 2 1