만드는 중입니다

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

문법

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

요약
a와 b로 이루어진 문맥 자유 문법이 생성하는 문자열 가운데 a의 개수가 b보다 많은 문자열이 있는지 판단합니다.
난이도

보통10점 중 7점

유형
동적 계획법, 그래프, 최단 경로
정답자
아직 제출이 없습니다

문법

형식 문법(formal grammar)은 형식 언어를 기술하는 방법이다. 문법은 Γ=⟨Σ,N,S∈N,P⊂N+×(Σ∪N)\*⟩\Gamma = \langle \Sigma, N, S \in N, P \subset N^{+} \times (\Sigma \cup N)^{\*}\rangle 로 나타내며, 여기서 Σ\Sigma는 알파벳이고 그 원소를 터미널이라고 부른다. NN은 논터미널의 집합, SS는 시작 논터미널, PP는 α→β\alpha \rightarrow \beta 꼴의 생성 규칙의 집합이다.

여기서 N+N^{+}는 하나 이상의 NN 원소로 이루어진 모든 문자열(비어 있지 않은 논터미널 문자열)이다. (Σ∪N)\*(\Sigma\cup N)^{\*}는 터미널과 논터미널로 이루어진 길이 0 이상의 모든 문자열(빈 문자열 포함)이다.

각 규칙의 왼쪽이 논터미널 하나뿐이면 그 문법은 문맥 자유 문법(context-free)이다. 즉 P⊂N×(Σ∪N)\*P \subset N \times (\Sigma\cup N)^{\*} 이다.

예를 들어 알파벳 Σ={‘a‘,‘b‘}\Sigma = \{`a`, `b`\}, 논터미널 집합 N={S,A}N = \{S, A\}, 그리고 다음 두 규칙이 있다고 하자.

  1. S→‘b‘AS \rightarrow `b`A
  2. A→‘aa‘A \rightarrow `aa`

이 문법은 문맥 자유 문법이다.

언어를 생성하려면 SS 하나로 이루어진 문자열에서 출발해 생성 규칙을 한 번 이상 적용한다. 규칙을 적용한다는 것은 현재 문자열에서 규칙의 왼쪽 부분을 찾아 오른쪽 부분으로 바꾸는 것이다. 문법이 생성하는 언어는 이렇게 만들 수 있는 터미널로만 이루어진 모든 문자열의 집합이다.

위 문법에서 baa는 언어에 속한다. S→‘b‘A→‘baa‘S \rightarrow `b`A \rightarrow `baa` 순서로 규칙을 적용하면 만들 수 있기 때문이다. 이 문법이 생성하는 문자열은 이것이 전부다.

무한한 언어를 생성하는 문법도 있고, 빈 언어를 생성하는 문법도 있다.

터미널 a와 b로 이루어진 문맥 자유 문법이 주어진다. 이 문법이 생성하는 언어에 a의 개수가 b의 개수보다 더 많은 문자열이 있는지 판정하라.

논터미널은 1부터 nn까지 번호가 매겨져 있다. 시작 논터미널의 번호는 항상 1이다.

입력

입력은 하나 이상의 테스트 케이스로 이루어진다.

각 테스트 케이스의 첫 줄에는 논터미널의 개수 nn과 생성 규칙의 개수 mm이 주어진다 (1≤n≤1001 \le n \le 100, 1≤m≤50 0001 \le m \le 50\,000).

이어지는 mm줄 각각은 규칙 하나를 나타낸다. 먼저 왼쪽 논터미널 AiA_i (1≤Ai≤n1 \le A_i \le n)와 오른쪽 기호의 개수 kik_i (0≤ki≤1000 \le k_i \le 100)가 주어진다. 그다음 kik_i개의 기호가 주어지며, 각 기호는 논터미널 Bi,jB_{i,j} (1≤Bi,j≤n1 \le B_{i,j} \le n)이거나 터미널 a 또는 b이다. 기호 사이는 공백 한 칸으로 구분한다.

모든 테스트 케이스의 nn 합은 1000을 넘지 않는다. 모든 테스트 케이스의 mm 합은 50 000을 넘지 않는다. 입력 크기는 5MB를 넘지 않는다.

입력은 0 0 으로 끝난다.

출력

각 테스트 케이스마다 한 줄에 답을 출력한다. 생성되는 언어에 a의 개수가 b의 개수보다 더 많은 문자열이 있으면 YES, 없으면 NO를 출력한다.

예제1

  1. 예제 1

    입력
    2 2
    1 2 a 2
    2 1 b
    2 2
    1 2 b 2
    2 2 a a
    2 2
    1 2 b 2
    2 3 a a 1
    0 0
    
    예상 출력
    NO
    YES
    NO