간식 분배
한국어
Language
Contribute a translation- Time limit
- 1500 ms
- Memory limit
- 1024 MB
- Submissions
- 0
- Correct
- 0
- Solved by
- 0
- AC rate
- —
Statement
$N$명의 학생과 $N$개의 간식이 있다. 학생들과 간식에는 각각 $1, 2, \cdots, N$의 번호가 붙어 있다.
각 학생은 $N$개의 간식 중 하나 이상의 간식을 좋아한다. 보다 구체적으로, $i$ $(1 \le i \le N)$번 학생은 $C_i$개의 간식을 좋아하며, 그 간식들의 번호는 $A_{i, 1}, A_{i, 2}, \cdots, A_{i, C_i}$이다.
처음에 방 안에는 $N$종류의 간식이 정확히 하나씩 놓여 있다. 다음과 같은 과정을 통해 학생들에게 간식을 분배하려고 한다.
- $N$명의 학생을 적절한 순서로 한 번에 한 명씩 방에 들여보낸다.
- 방에 들어간 학생은 현재 방에 남아있는 간식 중 자신이 좋아하는 모든 간식을 가져간다. 만약, 방 안에 자신이 좋아하는 간식이 하나도 없다면, 아무 간식도 가져가지 않는다.
$N$명의 학생이 방에 들어가는 순서를 적절히 정하여, 모든 학생이 정확히 하나의 간식을 가져가도록 하는 것이 가능한지 판별하라. 만약 가능하다면, 그러한 순서를 아무거나 하나 구하라.
Constraints
- 주어지는 모든 수는 정수이다.
- $1 \le N \le 200\,000$
- 정수 $i$ $(1 \le i \le N)$에 대하여 $1 \le C_i \le N$
- $C_1 + C_2 + \cdots + C_N \le 500\,000$
- 정수 $i$ $(1 \le i \le N)$와 정수 $j$ $(1 \le j \le C_i)$에 대하여 $1 \le A_{i, j} \le N$
- 정수 $i$ $(1 \le i \le N)$에 대하여, $C_i$개의 정수 $A_{i, 1}, A_{i, 2}, \cdots, A_{i, C_i}$의 값은 모두 서로 다르다.
Subtasks
- (6점) 정수 $i$ $(1 \le i \le N)$에 대하여 $C_i = 1$
- (11점) 모든 학생이 정확히 하나의 간식을 가져가도록 하는 순서가 존재한다면, $1, 2, \cdots, N$의 번호 순서도 그러한 조건을 만족한다.
- (8점) $N \le 5$
- (12점) $N \le 18$
- (18점) $N \le 300$
- (20점) $N \le 5\,000$
- (25점) 추가 제약 조건 없음.
Input
첫 줄에 학생과 간식의 수를 나타내는 정수 $N$이 주어진다.
그다음 $N$개의 줄에 걸쳐, $N$명의 학생이 좋아하는 간식에 대한 정보가 주어진다. 이 중 $i$ $(1 \le i \le N)$번째 줄에는 정수 $C_i$와 그 뒤에 $C_i$개의 정수 $A_{i, 1}, A_{i, 2}, \cdots, A_{i, C_i}$가 공백으로 구분되어 차례대로 주어진다.
Output
만약, 모든 학생이 정확히 하나의 간식을 가져가도록 하는 순서가 존재하지 않는다면, 첫 줄에 -1을 출력한다.
만약, $P_1, P_2, \cdots, P_N$의 번호 순서대로 학생들이 방에 들어갈 때 모든 학생이 정확히 하나의 간식을 가져간다면, 첫 줄에 $N$개의 정수 $P_1, P_2, \cdots, P_N$을 공백으로 구분하여 출력한다.
가능한 출력이 여러 개라면 그중 아무거나 하나를 출력해도 정답으로 인정된다.
Examples
2 2 1 2 2 1 2
-1
4 1 3 1 2 3 4 2 3 2 1 2
1 2 3 4
3 2 1 2 2 2 3 1 2
3 1 2
Tags
No tags yet