출제

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

요약
참가자와 문제의 관계가 주어질 때, 선택한 문제를 아는 참가자 수를 먼저 최대화하고 그다음 문제 집합의 크기를 최대화하는 문제를 고르는 과제이다.
난이도

보통10점 중 5점

유형
그리디, 그래프, 해시맵, 구현
정답자
아직 제출이 없습니다

문제

다가올 대회의 문제를 출제하려고 조직위원회가 이 대회의 숙련된 참가자 PP명을 초빙했다. 각 참가자는 몇몇 문제를 알고 있다. 참가자들은 문제 아이디어를 공유하는 것을 좋아하므로, 한 문제를 여러 참가자가 알 수도 있다. 아쉽게도 어떤 참가자가 대회에 출제된 문제 중 하나라도 알고 있으면, 그 참가자는 그 대회에 참가할 수 없다.

조직위원회는 대회의 규모를 중시하므로, 참가할 수 있는 사람이 최대한 많아지도록 문제를 고르려 한다. 이때 문제의 집합은 비어 있으면 안 되고, 가능한 한 문제도 많아야 한다.

조직위원회는 프로그래머가 아니라서 이런 방식으로 문제를 고르는 데 어려움을 겪고 있다. 그래서 여러분에게 도움을 요청한다.

입력

첫째 줄에 세 정수 PP, TT, MM이 주어진다. (1≤P1 \leq P, T≤105T \leq 10^5; 0≤M≤min⁡(106,P⋅T)0 \leq M \leq \min(10^6, P \cdot T)) 각각 참가자의 수, 문제의 수, 참가자와 그가 아는 문제의 쌍의 수이다.

다음 MM개의 줄에 각 참가자가 아는 문제가 주어진다. 각 줄에는 두 정수 uu와 vv가 주어진다. (1≤u≤P;1≤v≤T1 \leq u \leq P; 1 \leq v \leq T) 각각 참가자의 번호와 그가 아는 문제 하나의 번호이다. 한 참가자가 아는 각 문제는 정확히 한 번만 주어진다.

출력

첫째 줄에 두 수 P0P_0와 T0T_0를 출력한다. 이는 찾은 참가자의 수와 문제의 수이다. 참가자의 수를 먼저 최대화하고, 참가자의 수가 최대일 때 문제의 수를 최대화해야 한다.

둘째 줄에 고른 문제 집합에 포함된 T0T_0개의 문제 번호를 출력한다. 모든 번호는 TT 이하의 서로 다른 자연수여야 한다. 최적해가 여러 개면 아무거나 출력한다.

힌트

첫 번째 예제에서는 4번 문제도 한 사람만 알고 있으므로 선택할 수 있었다.

두 번째 예제에서는 4번과 5번 문제를 아무도 알지 못하므로, 이 둘을 선택하는 것이 가장 좋다.

예제2

  1. 예제 1

    입력
    3 4 6
    1 1
    1 2
    2 2
    2 3
    3 3
    3 4
    
    예상 출력
    2 1
    1
    
  2. 예제 2

    입력
    3 5 6
    1 1
    1 2
    2 1
    2 3
    3 1
    3 3
    
    예상 출력
    3 2
    4 5