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

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

끔찍한 시

시간 제한8초메모리 제한128 MB

요약
문자열과 여러 부분 문자열 질의가 주어질 때, 각 부분 문자열을 같은 조각이 여러 번 반복된 형태로 나누는 가장 짧은 주기의 길이를 구한다.
난이도

어려움10점 중 8점

유형
문자열, 정수론, 해시맵, 문자열 매칭
정답자
아직 제출이 없습니다

문제

Bytie는 어떤 시의 한 조각을 외워야 한다. 이 시는 현대 예술의 정신에 따라 소문자 알파벳으로만 이루어진 아주 긴 문자열이다. 듣기에는 형편없지만, 그건 Bytie의 가장 작은 걱정거리다. Bytie는 자신이 외워야 할 조각이 어느 것인지 완전히 잊어버렸고, 모든 조각이 외우기 어려워 보인다.

그래도 희망은 있다. 시의 어떤 부분들은 규칙적이기 때문이다. 때때로 어떤 조각 AA는 다른 조각 BB를 여러 번 이어 붙인 것과 같다. 즉, 어떤 정수 k≥1k \ge 1에 대해 A=BB⋯B=BkA = BB\cdots B = B^k가 성립한다. 이때 BB를 AA의 완전한 주기(full period)라고 부른다. (특히, 모든 문자열은 자기 자신을 완전한 주기로 가진다.) 완전한 주기가 짧은 조각일수록 외우기 쉽다.

시 전체와 Bytie가 후보로 의심하는 조각들의 목록이 주어질 때, 각 조각에 대해 가장 짧은 완전한 주기의 길이를 구하라.

입력

첫째 줄에 정수 nn (1≤n≤500,0001 \le n \le 500{,}000)이 주어진다. 둘째 줄에는 소문자 알파벳으로 이루어진 길이 nn의 문자열, 즉 시가 주어진다. 문자의 위치는 앞에서부터 11번부터 nn번까지 번호를 매긴다.

다음 줄에는 조각의 개수를 나타내는 정수 qq (1≤q≤2,000,0001 \le q \le 2{,}000{,}000)가 주어진다. 이어지는 qq개의 줄에는 각각 두 정수 aia_i와 bib_i (1≤ai≤bi≤n1 \le a_i \le b_i \le n)가 공백 하나로 구분되어 주어지며, 이는 위치 aia_i에서 시작해 위치 bib_i에서 끝나는 조각을 나타낸다.

출력

qq개의 줄을 출력한다. ii번째 줄에는 ii번째 조각의 가장 짧은 완전한 주기의 길이를 정수 하나로 출력한다.

예제3

  1. 예제 1

    입력
    8
    aaabcabc
    3
    1 3
    3 8
    4 8
    
    예상 출력
    1
    3
    5
    
  2. 예제 2

    입력
    6
    aaaaaa
    3
    1 6
    2 5
    3 3
    
    예상 출력
    1
    1
    1
    
  3. 예제 3

    입력
    5
    abcde
    3
    1 5
    2 4
    1 1
    
    예상 출력
    5
    3
    1