Решение
import java.io.BufferedReader
import java.io.InputStreamReader
import java.io.BufferedWriter
import java.io.OutputStreamWriter
import java.util.PriorityQueue
import java.util.ArrayList
fun main(args: Array<String>) {
val reader = BufferedReader(InputStreamReader(System.`in`))
val writer = BufferedWriter(OutputStreamWriter(System.out))
val n = reader.readLine().toInt()
val revAdj = Array(n + 1) { ArrayList<Int>() }
val outDegree = IntArray(n + 1)
for (courseIndex in 1..n) {
val parts = reader.readLine().split(" ")
val k = parts[0].toInt()
if (k > 0) {
for (j in 1..k) {
val prerequisiteCourse = parts[j].toInt()
revAdj[courseIndex].add(prerequisiteCourse)
outDegree[prerequisiteCourse]++
}
}
}
val pq = PriorityQueue<Int>(compareByDescending { it })
for (i in 1..n) {
if (outDegree[i] == 0) {
pq.add(i)
}
}
val resultReversed = ArrayList<Int>(n)
while (pq.isNotEmpty()) {
val u = pq.poll()
resultReversed.add(u)
for (p in revAdj[u]) {
outDegree[p]--
if (outDegree[p] == 0) {
pq.add(p)
}
}
}
val finalOrder = resultReversed.reversed()
if (finalOrder.size != n) {
} else {
writer.write(finalOrder.joinToString(" "))
writer.newLine()
}
reader.close()
writer.close()
}