1procedure topologicalSort(graph)
2 compute in-degree for each vertex
3 create queue Q
4 enqueue all vertices with in-degree 0
5 while Q is not empty do
6 v ← dequeue from Q
7 add v to result
8 for each neighbor u of v do
9 in-degree[u] ← in-degree[u] - 1
10 if in-degree[u] = 0 then
11 enqueue u into Q
12 return result