만드는 중입니다

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

복잡한 문제

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

요약
복잡도 클래스 사이의 부분집합 관계와 진부분집합 관계가 주어질 때, 서로 다른 클래스의 최소 개수와 최대 개수를 구합니다.
난이도

보통10점 중 6점

유형
그래프, 유니온 파인드, 위상 정렬
정답자
아직 제출이 없습니다

문제

컴퓨터 과학에는 많은 문제가 있고, 그중 일부는 다른 문제보다 어렵다. 컴퓨터 과학자들은 문제를 복잡도 클래스로 묶고, 이 클래스들이 서로 어떤 관계를 맺는지 분석한다.

복잡도 클래스는 단순히 문제들의 집합이다. 예를 들어 복잡도 클래스 P는 실행 시간이 입력 크기의 다항식 함수인 알고리즘으로 풀 수 있는 결정 문제들의 집합이다. P에 속한 모든 문제는 NP에도 속한다. NP는 "예" 입력을 다항 시간에 검증할 수 있는 결정 문제들의 집합이다. NP의 모든 문제가 P에도 속하는지는 알려져 있지 않으므로, P와 NP는 하나의 클래스일 수도 있고 서로 다른 두 클래스일 수도 있다.

정지 문제는 모든 결정 문제의 집합인 ALL에 속하지만, 튜링 머신으로 풀 수 있는 결정 문제의 집합인 R에는 속하지 않는다. 따라서 ALL과 R은 서로 다른 두 복잡도 클래스다.

복잡도 클래스 사이의 관계가 주어졌을 때, 서로 다른 복잡도 클래스의 최소 개수와 최대 개수를 구하라.

입력

첫째 줄에 공백으로 구분된 두 정수 0≤M,N≤1050 \leq M, N \leq 10^5가 주어진다. 단, M+N>0M + N > 0이다.

다음 MM개의 줄에는 서로 다른 두 복잡도 클래스 AiA_i와 BiB_i가 주어진다. 이는 Ai⊆BiA_i \subseteq B_i를 뜻하며, AiA_i에 속한 모든 문제는 BiB_i에도 속한다.

그다음 NN개의 줄에는 서로 다른 두 복잡도 클래스 AjA_j와 BjB_j가 주어진다. 이는 Aj⊊BjA_j \subsetneq B_j를 뜻하며, AjA_j에 속한 모든 문제가 BjB_j에도 속하고, BjB_j에는 AjA_j에 속하지 않는 문제가 적어도 하나 있다.

복잡도 클래스는 영문자 1자 이상 8자 이하로 이루어지며, 대문자와 소문자를 모두 쓸 수 있다. 서로 다른 두 클래스 사이의 관계는 최대 하나만 주어지며, 주어진 관계들은 모순되지 않는다.

출력

주어진 관계에 나타나는 서로 다른 복잡도 클래스의 최소 개수와 최대 개수를 공백으로 구분하여 한 줄에 출력한다.

예제4

  1. 예제 1

    입력
    1 0
    P NP
    
    예상 출력
    1 2
    
  2. 예제 2

    입력
    0 1
    R ALL
    
    예상 출력
    2 2
    
  3. 예제 3

    입력
    3 0
    QMIP MIPstar
    MIPstar RE
    RE QMIP
    
    예상 출력
    1 1
    
  4. 예제 4

    입력
    11 8
    NC P
    P BPP
    P coNP
    P NP
    BPP BQP
    coNP PSPACE
    BQP PSPACE
    NP PSPACE
    PSPACE EXPTIME
    EXPTIME NEXPTIME
    NEXPTIME EXPSPACE
    REG CFL
    CFL NC
    CFL CSL
    NC PSPACE
    CSL PSPACE
    EXPSPACE R
    R RE
    RE ALL
    
    예상 출력
    7 16