만드는 중입니다

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

함수 루프 탐지

면접 대비

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

요약
함수 호출 목록에서 이름이 모두 다르고 연속으로 가장 많이 반복되는 구간을 찾아, 그 길이와 반복 횟수, 구간의 내용을 출력합니다.
난이도

보통10점 중 6점

유형
배열, 해시맵, 슬라이딩 윈도우
정답자
아직 제출이 없습니다

문제

익준이는 한 프로그램을 실행하는 동안 호출된 함수명을 기록한 함수 호출 리스트를 가지고 있다. 이 리스트에서 서로 다른 원소로만 이루어진 연속된 함수 호출 구간 중, 연속하여 가장 많이 반복된 구간을 찾고 싶다.

예를 들어 [A,B,C,A,B,C][A, B, C, A, B, C]에는 구간 [A,B,C][A, B, C]가 두 번 들어 있다.

반면 [A,B,C,B,A,B,C,B][A, B, C, B, A, B, C, B]에서는 구간 [A,B,C,B][A, B, C, B]가 연속하여 반복되지만, 함수명 BB가 구간 안에 두 번 들어 있으므로 조건을 만족하지 않는다.

입력

첫 번째 줄에 정수 NN이 주어진다. (1≤N≤100 0001 \leq N \leq 100\,000)

두 번째 줄에 함수 호출 리스트에 속한 영어 대문자로만 이루어진 문자열 SiS_i가 공백으로 구분되어 NN개 주어진다. (1≤∣Si∣≤101 \leq |S_i| \leq 10)

출력

첫 번째 줄에 가장 많이 반복된 함수 호출 구간 중 가장 먼저 나오는 구간의 길이와 반복 횟수를 출력한다.

두 번째 줄에 그 함수 호출 구간을 공백으로 구분하여 출력한다.

단, 두 번 이상 반복된 구간이 없으면 -1만 출력한다.

힌트

∣S∣|S|는 문자열 SS의 길이를 뜻한다.

예제4

  1. 예제 1

    입력
    6
    O IK O IK JUN JUN
    
    예상 출력
    2 2
    O IK
    
  2. 예제 2

    입력
    15
    A B C B C A B C B C A B C B C
    
    예상 출력
    2 2
    B C
    
  3. 예제 3

    입력
    5
    A A A A A
    
    예상 출력
    1 5
    A
    
  4. 예제 4

    입력
    8
    A B C B A B C B
    
    예상 출력
    -1