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

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

패키지

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

요약
각 응용 프로그램마다 버전 하나를 골라, 어떤 충돌 집합에도 두 개의 선택된 패키지가 들어가지 않도록 해야 한다. 충돌들은 서로 겹치지 않으므로 각 응용 프로그램을 정점으로 하는 그래프로 모델링하여 해결한다.
난이도

어려움10점 중 8점

유형
그래프, 투 포인터, 구현
정답자
아직 제출이 없습니다

문제

Vinux OS에서 패키지를 설치할 때 Vasya는 현대적인 패키지 관리자인 Vum을 사용한다.

각 패키지에는 설치할 수 있는 여러 버전이 있다. 한 번에 한 버전만 설치할 수 있다. 특정 애플리케이션의 특정 버전을 패키지라고 부르자. 서로 다른 애플리케이션의 특정 버전끼리 호환되지 않을 수 있기 때문에 Vum에는 충돌이라는 개념이 있다. 모든 충돌은 패키지의 집합이며, 그중 하나만 설치할 수 있다. 충돌 목록에 있는 패키지를 두 개 이상 설치하려고 하면 충돌이 발생하며, Vasya는 이를 원하지 않는다.

모든 애플리케이션의 서로 다른 버전끼리 충돌할 수도 있고 그렇지 않을 수도 있다. 애플리케이션의 여러 버전이 하나의 충돌에 포함될 수 있으며, 애플리케이션의 모든 버전이 포함될 수도 있다.

Vum의 충돌 설명 시스템은 다소 원시적이기 때문에 각 패키지는 하나의 충돌에만 나열될 수 있다.

Vasya는 Vinux를 충돌 없이 사용하면서 NN개의 서로 다른 애플리케이션을 설치하려고 한다. 위의 규칙을 어기지 않으면서 애플리케이션 버전을 선택해야 하지만, Vum의 철저한 의존성 해결 알고리즘으로는 이 작업을 처리할 수 없다. Vasya는 패키지 관리자에 대한 도움을 요청한다.

입력

입력 파일의 첫 번째 줄에는 정수 NN이 주어진다. 이는 Vasya가 설치하려는 애플리케이션의 수이다 (11 ≤\le NN ≤\le 200200).

다음 NN개의 줄에는 애플리케이션의 설명이 주어지며, 각 설명은 버전 목록을 포함한다. 애플리케이션 설명은 공백으로 구분된 다음 필드로 구성된다:

  • 애플리케이션 이름: 1자에서 10자 사이의 소문자 라틴 문자로 이루어진 문자열;
  • 버전 수: 1 0001\,000 이하의 양의 정수;
  • 버전 번호: 오름차순으로 나열된 양의 정수.

애플리케이션의 번호는 100 000100\,000 이하이다. 모든 애플리케이션 이름은 서로 다르다.

다음 줄에는 충돌의 수 KK가 주어진다 (00 ≤\le KK ≤\le 500500).

다음 KK개의 줄에는 충돌이 설명된다. 충돌 설명은 충돌에 포함된 패키지의 수 TT로 시작한다. 그다음 TT개의 패키지가 공백으로 구분되어 나열된다. 각 패키지에 대해 애플리케이션 이름과 버전 번호가 주어진다.

충돌에 나열된 패키지는 중복되지 않으며, 모든 버전은 애플리케이션 설명에 언급되어 있다고 보장된다.

출력

충돌 없이 NN개의 애플리케이션을 모두 설치할 수 없다면, 출력 파일의 유일한 줄에 No라는 단어를 출력해야 한다. 가능하다면, 첫 번째 줄에 Yes라는 단어를 출력하고, 두 번째 줄에 설치해야 하는 버전 번호를 공백으로 구분하여 나열해야 한다.

NN개의 애플리케이션에 대한 버전은 입력 파일에 설명된 애플리케이션의 순서와 동일한 순서로 출력해야 한다. 가능한 선택이 여러 개라면 그중 아무거나 출력해도 된다.

힌트

첫 번째 예제에는 두 개의 충돌이 있다. 첫 번째 충돌은 vim의 세 번째 버전과 nano의 여덟 번째 버전을 동시에 설치하는 것을 막는다. 두 번째 충돌은 다음 중 하나만 설치할 수 있음을 나타낸다: vim의 1번 버전, nano의 5번 버전, vim의 2번 버전, 또는 아무것도 설치하지 않음. 올바른 해는 다음과 같다:

  • 1 8 2
  • 1 8 3
  • 2 8 2
  • 2 8 3
  • 3 5 2
  • 3 5 3

두 번째 예제에는 두 개의 애플리케이션이 있으며, 각각 하나의 버전만 가진다. 그러나 유일한 충돌이 두 애플리케이션을 함께 설치하는 것을 금지한다.

예제2

  1. 예제 1

    입력
    3
    vim 3 1 2 3
    nano 2 5 8
    python 2 2 3
    2
    2 vim 3 nano 8
    3 vim 1 nano 5 vim 2
    
    예상 출력
    Yes
    2 8 2
    
  2. 예제 2

    입력
    2
    firefox 1 38
    chrome 1 46
    1
    2 firefox 38 chrome 46
    
    예상 출력
    No