Wildcard and Query

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

요약
고정된 문자열 S에 대해, 와일드카드 패턴 T가 S와 매칭되는지, 매칭된다면 그 방법이 유일한지 답하는 문제입니다.
난이도

어려움10점 중 8점

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

문제

알파벳 소문자로 이루어진 문자열 SS가 주어진다.

알파벳 소문자 및 "*"로 이루어진 문자열 TT는 다음 조건을 만족할 때 SS와 매칭된다.

  • TT의 각 "*"들을 각각 길이가 00 이상인 임의의 문자열로 대체했을 때 SS를 만들 수 있다.

예를 들어 "a*b"는 "ab", "acb", "aabb" 등과 매칭되지만 "abc"와는 매칭되지 않는다.

만약 다음 조건을 만족한다면 매칭이 유일하다.

  • TT의 각 "*"를 문자열로 대체하여 SS를 만드는 방법이 유일하다.

예를 들어 "a*b*c"는 "abc", "axbxc"와의 매칭은 유일하지만, "abbc"와의 매칭은 유일하지 않다. 첫 번째 "*"를 "b", 두 번째 "*"를 빈 문자열로 바꾸어도 되고, 첫 번째 "*"를 빈 문자열, 두 번째 "*"를 "b"로 바꾸어도 되기 때문이다.

SS가 주어질 때 다음 쿼리에 답하는 프로그램을 작성하여라.

  • 문자열 TT가 주어지면 TT가 SS와 매칭되는지, 매칭된다면 유일한지 여부를 출력한다.

입력

첫째 줄에 알파벳 소문자로 이루어진 문자열 SS가 주어진다. (1≤∣S∣≤300,0001\le |S|\le 300\\, 000)

둘째 줄에 쿼리의 수 QQ가 주어진다. (1≤Q≤300,0001\le Q\le 300\\, 000)

이후 QQ개의 줄에 걸쳐, 그중 ii번째 줄에는 문자열 T_iT\_{i}가 주어진다. T_iT\_{i}는 알파벳 소문자 및 "*"로 이루어져 있다.

모든 쿼리에 대해 T_iT\_{i}들의 길이의 합은 300,000300\\, 000 이하이다.

출력

각 쿼리에 대한 답을 QQ개의 줄에 걸쳐 순서대로 출력한다.

그중 ii번째 줄에는 각 T_iT\_{i}에 대해서 SS와 매칭되지 않는 경우 0, 매칭되고 유일한 경우 1, 그 외의 경우 2를 출력한다.

예제1

  1. 예제 1

    입력
    axbbc
    3
    abc
    a*c
    a*b*c
    
    예상 출력
    0
    1
    2