만드는 중입니다

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

Rounddog와 돌 게임

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

요약
질의마다 부분 문자열 T를 골라, Rounddog가 더미를 몇 개 버려도 Calabash가 이기도록 하는 돌 개수 합의 최댓값을 구합니다. 이길 수 없으면 -1을 출력합니다.
난이도

어려움10점 중 9점

유형
문자열, 문자열 매칭, 비트 연산, 트리
정답자
아직 제출이 없습니다

문제

Nim은 단순한 규칙으로 전 세계에 알려진 돌 가져가기 게임이다. 처음에 여러 개의 돌 더미가 있다. 두 플레이어가 번갈아 가며 더미 하나에서 돌을 적어도 한 개 가져간다. 합법적인 수를 둘 수 없는 플레이어가 진다.

8월 17일, 특별한 날에 Rounddog와 Calabash는 자신들만의 돌 가져가기 게임을 만든다. 새 규칙은 다음과 같다.

시작할 때 Calabash가 오른쪽 주머니에서 문자열 SS를 꺼낸다. 이 문자열이 게임의 기준이며, 게임은 총 mm 라운드로 진행된다.

각 라운드가 시작될 때 공통 친구 Severus가 SS의 부분 문자열 TT를 고른다. 플레이어가 게임을 시작하기 전에 준비 단계가 세 번 있다.

1단계에서 Calabash는 접미사가 모두 TT인 SS의 부분 문자열을 하나 이상 고른다. 고른 문자열은 서로 달라야 한다. 예를 들어 "ris"는 "claris"의 접미사다. 문자열은 자기 자신의 접미사이기도 하다.

2단계에서 Calabash는 고른 문자열을 모두 돌 더미로 바꾼다. 고른 문자열 XX마다 WpW_p개의 돌로 이루어진 더미가 생긴다. 여기서 pp는 SS에서 XX가 나타나는 횟수다. 예를 들어 "aba"는 "ababa"에 두 번 나타나므로 돌 두 개짜리 더미가 된다.

3단계는 Rounddog가 맡는다. Severus와 Calabash가 수를 정한 뒤, Rounddog가 Calabash가 고른 더미 중 일부를 버린다. 모든 더미를 버릴 수는 없다. 그러면 게임이 바로 끝나기 때문이다.

남은 더미로 고전적인 Nim 게임을 한다. Calabash가 먼저 둔다.

우리의 소중한 Quailty는 두 플레이어가 최선을 다할 때 각 라운드에서 Calabash가 이기는지 알고 싶어 한다. 또 Calabash가 최선을 다해도 이길 수 있는 범위 안에서, 2단계에서 만들 수 있는 돌의 총개수의 최댓값도 구하고자 한다.

입력

첫 줄에 테스트 케이스의 수 TT (1≤T≤31 \le T \le 3)가 주어진다.

각 테스트 케이스의 첫 줄에는 정수 nn (1≤n≤100 0001 \le n \le 100\,000)이 주어진다.

둘째 줄에는 길이가 nn인 소문자 알파벳 문자열 SS가 주어진다.

셋째 줄에는 nn개의 정수 WiW_i (1≤Wi<2581 \le W_i < 258)가 주어진다.

다음 줄에는 라운드 수 mm (1≤m≤200 0001 \le m \le 200\,000)이 주어진다.

이어지는 mm개의 줄에는 정수 ll과 rr (1≤l≤r≤n1 \le l \le r \le n)이 주어진다. 이는 해당 라운드에서 Severus가 TT로 S[l,r]S[l, r]을 고른다는 뜻이다.

출력

각 테스트 케이스마다 라운드당 한 줄씩, 총 mm개의 줄을 출력한다. 각 줄에는 그 라운드의 2단계에서 Calabash가 최선을 다해 이길 수 있는 돌의 총개수 최댓값을 출력한다. Calabash가 항상 지는 경우에는 −1-1을 출력한다.

예제1

  1. 예제 1

    입력
    1
    5
    aabab
    1 3 5 7 9
    5
    1 1
    1 2
    2 2
    2 3
    3 5
    
    예상 출력
    6
    1
    6
    4
    1