아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

사전순 강의

시간 제한2초메모리 제한512 MB

요약
사전순으로 정렬된 서로 다른 n개의 문자열이 주어질 때, 그 부분 문자열로 정렬해도 같은 순서가 유지되는 가장 짧은 구간 [i,j]를 찾는다.
난이도

보통10점 중 7점

유형
문자열, 정렬, 그리디, 구현
정답자
아직 제출이 없습니다

문제

독일의 유명한 대학인 OUG("Ordered University of Germany")에는 학생이 아주 많아서, 학번이 모두 같은 길이 ℓ\ell인 긴 문자열이다. 학번에는 영어 소문자만 들어간다. 안타깝게도 이 대학의 총장은 무질서를 싫어해서, 학생들은 항상 학번의 사전순으로 강의실에 들어와야 한다. 짐작할 수 있듯이, 강의실 앞에서 학생들이 줄을 서는 데는 꽤 많은 시간이 걸린다. 전산학과 학생인 Georgina는 이 과정을 빠르게 할 방법을 떠올렸다. 정수 i,ji, j를 1≤i≤j≤ℓ1 \leq i \leq j \leq \ell로 고정해, 학번의 ii번째 글자부터 jj번째 글자까지의 부분 문자열을 기준으로 삼는 것이다. 그러면 학생들은 학번의 이 부분 문자열을 기준으로 사전순으로 줄을 선다. 물론, 이 새로운 순서가 전체 학번을 기준으로 한 사전순과 같아지도록 ii와 jj를 골라야 한다. 과정을 최대한 빠르게 하려면 부분 문자열의 길이가 최소여야 한다. Georgina가 이 문제를 해결하도록 도와줄 수 있는가?

입력

입력은 다음과 같다.

  • 두 정수 nn과 ℓ\ell이 있는 한 줄

    • nn (2≤n≤5002 \leq n \leq 500)은 학번의 개수다.
    • ℓ\ell (1≤ℓ≤2⋅1041 \leq \ell \leq 2 \cdot 10^4)은 각 학번의 길이다.
  • nn개의 줄. ii번째 줄에는 ii번째 학생의 학번이 들어 있다.

모든 학번에는 영어 소문자만 들어가며, 서로 다르고 사전순으로 주어진다.

출력

학번의 어떤 부분 문자열을 기준으로 학생들이 사전순으로 줄을 섰을 때 전체 학번을 기준으로 사전순으로 줄을 섰을 때와 같은 순서가 되게 하는 가장 짧은 부분 문자열의 첫 글자와 마지막 글자의 인덱스를 나타내는 두 정수를 출력한다.

가장 짧은 부분 문자열이 여러 개라면, 그중 아무거나 출력해도 된다.

예제2

  1. 예제 1

    입력
    4 6
    aaaaaa
    aaabbb
    aaacaa
    aaacac
    
    예상 출력
    4 6
    
  2. 예제 2

    입력
    3 5
    cccca
    ccgda
    ccgia
    
    예상 출력
    4 4