from collections import deque

def topological_order(adj):
    indegree = [0] * len(adj)
    for neighbors in adj:
        for v in neighbors:
            indegree[v] += 1
    queue = deque(u for u, degree in enumerate(indegree) if degree == 0)
    order = []
    while queue:
        u = queue.popleft()
        order.append(u)
        for v in adj[u]:
            indegree[v] -= 1
            if indegree[v] == 0:
                queue.append(v)
    return order if len(order) == len(adj) else []

def course_order(n, prerequisites):
    adj = [[] for _ in range(n)]
    for course, prerequisite in prerequisites:
        adj[prerequisite].append(course)
    return topological_order(adj)
