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

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

삼진 문자열 혁명

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

요약
삼진 문자열에 주어진 재작성 연산을 적용할 수 있을 때, 각 질의 문자열로 변환 가능한 s의 부분 문자열 개수를 구한다.
난이도

어려움10점 중 9점

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

문제

삼진 문자열은 각 자리가 00, 11, 22 중 하나인 문자열이다.

삼진 문자열에 대해 Chiaki는 다음 연산을 원하는 만큼 수행할 수 있다.

  • 0000 한 곳을 1212로 바꾸거나, 1212 한 곳을 0000으로 바꾼다. 예를 들어 120011120011은 121211121211이나 000011000011로 바뀔 수 있다.
  • 111111 한 곳을 2020으로 바꾸거나, 2020 한 곳을 111111로 바꾼다. 예를 들어 11120111112011은 202011202011이나 1111111111111111로 바뀔 수 있다.
  • 2222 한 곳을 지우거나, 문자열의 아무 위치에 2222를 넣는다. 문자열의 맨 앞이나 맨 뒤에 넣어도 된다. 예를 들어 12211221은 1111, 221221221221, 122221122221, 122122122122로 바뀔 수 있다.
  • 012012 한 곳을 지우거나, 문자열의 아무 위치에 012012를 넣는다. 문자열의 맨 앞이나 맨 뒤에 넣어도 된다. 예를 들어 1012110121은 1111, 0121012101210121, 1012012110120121, 1001212110012121, 1010122110101221, 1012012110120121, 1012101210121012로 바뀔 수 있다.

Chiaki에게 길이 nn인 삼진 문자열 ss와 mm개의 다른 삼진 문자열 t1,t2,…,tmt_1,t_2,\dots,t_m이 있다. 각 삼진 문자열 tit_i에 대해, 부분 문자열 sl..rs_{l..r}에 위 연산을 여러 번 수행해 tit_i로 만들 수 있는 쌍 (l,r)(l, r) (1≤l≤r≤n1 \le l \le r \le n)의 개수를 구하려고 한다.

입력

여러 테스트 케이스가 주어진다. 입력의 첫 줄에는 테스트 케이스의 수 TT가 주어진다. 각 테스트 케이스는 다음과 같다.

첫 줄에는 두 정수 nn과 mm (1≤n,m≤1061 \le n, m \le 10^6)이 주어진다. nn은 ss의 길이이고, mm은 다른 삼진 문자열의 개수이다.

둘째 줄에는 길이 nn인 삼진 문자열 ss가 주어진다.

다음 mm개 줄에는 각각 삼진 문자열 tit_i (1≤∣ti∣≤1061 \le |t_i| \le 10^6)가 주어진다.

모든 테스트 케이스에 걸친 모든 문자열 길이의 합은 2×1062 \times 10^6을 넘지 않는다.

출력

각 테스트 케이스마다 mm개 줄을 출력한다. ii번째 줄에는 삼진 문자열 tit_i에 대한 답을 나타내는 정수를 출력한다.

예제1

  1. 예제 1

    입력
    2
    11 4
    01021001020
    0
    1
    2
    012
    6 3
    012210
    0
    1
    2
    
    예상 출력
    6
    3
    4
    0
    2
    4
    4