앞에 와야하는 a를 기준으로 배열을 만들고 b를 원소로 삼는다.
비교한 사람들 안에서만 순서를 지키면 된다.
let p = readLine()!.split(separator: " ").map{Int(String($0))!}
let n = p[0], m = p[1]
var line = [[Int]](repeating: [], count: n+1)
var head = [Bool](repeating: true, count: n+1)
var visited = [Bool](repeating: false, count: n+1)
var result = [Int]()
for _ in 0..<m {
let t = readLine()!.split(separator: " ").map{Int(String($0))!}
let (front,back) = (t[0],t[1])
line[front].append(back)
if head[back] {
head[back] = false
}
}
func dfs(_ n: Int) {
for i in line[n] {
if !visited[i] {
visited[i] = true
dfs(i)
}
}
result.append(n)
}
for i in 1...n where head[i] {
dfs(i)
}
print(result.reversed().map{String($0)}.joined(separator: " "))