만드는 중입니다

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

화성

면접 대비

시간 제한7초메모리 제한1024 MB

요약
K개 성부와 N개 음 행이 주어질 때, 두 성부가 모두 움직이면서 12로 나눈 나머지가 7인 간격을 유지하는 연속한 두 행의 성부 쌍을 모두 찾아 출력한다.
난이도

쉬움10점 중 3점

유형
구현, 완전 탐색, 배열, 수학
정답자
아직 제출이 없습니다

문제

고전 화성학에서는 여러 성부로 이루어진 악곡을 쓸 때 이른바 평행 5도를 피해야 한다. 평행 5도란 다음과 같은 상황을 말한다. 두 성부 사이의 반음 단위 거리를 1212로 나눈 나머지가 77이고, 이어서 두 성부의 음높이가 모두 바뀐 뒤 두 성부 사이의 반음 단위 거리를 1212로 나눈 나머지가 다시 77이 되는 경우이다.¹

평행 5도는 두 성부의 음높이가 모두 바뀔 때에만 발생한다. 즉, 연속된 두 음에서 두 성부 사이의 거리를 1212로 나눈 나머지가 77이더라도, 두 성부 중 하나 또는 둘의 음높이가 그대로라면 평행 5도가 아니다.

KK개의 성부로 이루어진 악곡에서 평행 5도의 존재 여부를 찾아내는 프로그램을 작성하라.

음높이는 정수로 주어진다. 값 00은 첫째 옥타브의 도(C) 음을 나타내며, 양의 정수 kk는 그보다 kk반음 높은 음을, 음의 정수는 그만큼 낮은 음을 나타낸다. 예를 들어 44는 첫째 옥타브의 미(E) 음에, −3-3은 작은 옥타브의 라(A) 음에 해당한다.²


¹ 음악 이론에 더 관심 있는 독자를 위한 참고: 때로는 연속된 두 개의 완전 5도뿐 아니라, 예컨대 완전 5도에 이어지는 감 5도(각각 7반음과 6반음)도 평행 5도로 보기도 한다. 이 문제에서는 연속된 두 개의 완전 5도만을 평행 5도로 본다.

² 이 문제를 푸는 데 음 이름을 이해할 필요는 없다.

입력

첫째 줄에는 공백으로 구분된 두 정수 NN과 KK가 주어진다 (0≤N≤1000000 \le N \le 100000, 2≤K≤102 \le K \le 10). 여기서 NN은 각 성부에 들어 있는 음의 개수, KK는 성부의 개수이다.

이어지는 NN개의 줄에는 각각 공백으로 구분된 KK개의 정수 A1,i … AK,iA_{1,i}\ \ldots\ A_{K,i}가 주어진다. Aj,iA_{j,i}는 jj번째 성부에서 ii번째 음의 높이이다 (−100≤AK,i≤…≤A1,i≤100-100 \le A_{K,i} \le \ldots \le A_{1,i} \le 100, i∈1…Ni \in 1 \ldots N). 한 줄에 주어진 음들은 동시에 울리며, 연속한 줄에 있는 음들은 바로 이어서 울린다.

출력

악곡에 평행 5도가 없으면 한 줄에 단어 POLE을 출력한다.

평행 5도가 있으면, 각 평행 5도마다 한 줄씩 출력한다. 음의 줄 ii와 i+1i+1 사이에서 성부 ss와 tt (s<ts < t) 사이에 평행 5도가 생기면, 공백으로 구분된 세 정수 ii, ss, tt를 출력한다.

모든 평행 5도를 ii의 오름차순으로 출력한다. 두 줄의 ii가 같으면 ss의 오름차순으로, ii와 ss가 모두 같으면 tt의 오름차순으로 정렬한다.

예제4

  1. 예제 1

    입력
    5 2
    7 0
    10 -2
    14 -5
    12 -7
    7 0
    
    예상 출력
    3 1 2
    4 1 2
    
  2. 예제 2

    입력
    0 10
    
    예상 출력
    POLE
    
  3. 예제 3

    입력
    3 3
    13 7 0
    13 6 -1
    10 3 -4
    
    예상 출력
    1 2 3
    2 1 2
    2 2 3
    
  4. 예제 4

    입력
    2 2
    7 0
    7 0
    
    예상 출력
    POLE