만드는 중입니다

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

접미사 오토마톤

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

요약
문자열 S의 서로 다른 부분 문자열을 길이순, 같은 길이면 사전순으로 정렬했을 때 k번째 문자열의 첫 등장 위치 l, r을 구합니다.
난이도

어려움10점 중 8점

유형
문자열, 문자열 매칭, 정렬
정답자
아직 제출이 없습니다

문제

JB는 Suffix Automaton의 국가 올림피아드 튜터이다. 오늘 그는 다음 문제를 만들었다.

문자열 SS가 주어졌다고 하자. SS의 서로 다른 부분 문자열을 모두 적는다. 길이가 짧은 순서대로 정렬하고, 길이가 같으면 사전순으로 앞선 문자열을 먼저 둔다. 이렇게 정렬된 문자열의 수열을 AA라고 한다.

JB는 QQ개의 질문을 준비했다. 각 질문마다 정수 kk가 주어지면, AA에서 kk번째 문자열을 찾아야 한다.

문제를 단순하게 하려고, 그 문자열이 SS에서 처음 나타나는 왼쪽 위치와 오른쪽 위치만 출력하면 된다.

입력

첫째 줄에 문자열 SS가 주어진다(1≤∣S∣≤1061\leq |S|\leq 10^6). SS는 소문자로만 이루어진다.

둘째 줄에 정수 QQ가 주어진다(1≤Q≤1061\leq Q\leq 10^6).

이어지는 QQ개의 줄에 각각 정수 kk가 하나씩 주어진다(1≤k≤10121\leq k\leq 10^{12}).

출력

각 질문에 대해, 답 문자열이 SS에서 처음 나타나는 왼쪽 위치 ll과 오른쪽 위치 rr을 공백으로 구분해 출력한다. kk가 AA의 길이보다 크면 "-1 -1"을 출력한다.

예제2

  1. 예제 1

    입력
    ccpcguilin
    5
    1
    10
    4
    8
    26
    
    예상 출력
    1 1
    2 3
    8 8
    1 2
    4 7
    
  2. 예제 2

    입력
    banana
    3
    5
    10
    16
    
    예상 출력
    1 2
    2 5
    -1 -1