만드는 중입니다

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

가장 짧은 부분열이 아닌 문자열

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

요약
알파벳과 목표 문자열이 주어질 때, 각 질의 문자열이 목표 문자열의 부분수열이 아닌 가장 짧은 문자열인지 판정한다.
난이도

어려움10점 중 8점

유형
문자열, 그리디, 동적 계획법, 해시맵
정답자
아직 제출이 없습니다

문제

문자열 ss에서 문자를 0개 이상 지워서 문자열 tt를 얻을 수 있을 때, tt를 ss의 부분열이라고 한다. tt는 ss에서 연속할 필요는 없지만, tt의 문자들은 ss에서와 같은 순서로 나타나야 한다.

소문자 영어 알파벳 'a'부터 'z'까지의 부분집합 vv가 주어졌을 때, 문자열 uu의 모든 문자와 ss의 모든 문자가 vv에 속하면서 uu가 ss의 부분열이 아니면, uu를 ss의 없는 부분열이라고 한다. ss의 가장 짧은 없는 부분열은 ss의 없는 부분열 중 길이가 가장 짧은 것이다.

영어 알파벳 문자 집합, 그 집합의 문자로 이루어진 목표 문자열, 그 집합의 문자로 이루어진 질의 문자열 목록이 주어진다. 각 질의 문자열이 목표 문자열의 가장 짧은 없는 부분열인지 판별하라.

입력

첫째 줄에는 사전순으로 정렬된 소문자 문자열 vv (1≤∣v∣≤261 \le |v| \le 26)가 주어진다. 각 문자는 최대 한 번 나타난다. 이는 알파벳 문자 집합이다.

둘째 줄에는 문자열 ss (1≤∣s∣≤1061 \le |s| \le 10^6, ss는 vv의 문자만 포함)가 주어진다. 이는 질의의 대상이 되는 목표 문자열이다.

셋째 줄에는 정수 nn (1≤n≤1061 \le n \le 10^6)이 주어진다. 이는 질의의 수이다.

다음 nn개의 줄에는 각각 문자열 qq (1≤∣q∣≤1061 \le |q| \le 10^6, qq는 vv의 문자만 포함)가 주어진다. 이들은 질의 문자열이다. 모든 질의 문자열의 길이의 합은 10610^6을 넘지 않는다.

출력

nn개의 줄을 출력한다. 각 줄에는 질의 문자열이 목표 문자열의 가장 짧은 없는 부분열이면 11을, 아니면 00을 출력한다. 출력은 입력된 질의 순서대로 이루어져야 한다.

예제1

  1. 예제 1

    입력
    abc
    abcccabac
    3
    cbb
    cbba
    cba
    
    예상 출력
    1
    0
    0