class Solution {
public:
vector<int> findOrder(int numCourses, vector<vector<int>>& prerequisites) {
unordered_map<int, vector<int>> dependencies;
vector<int> indegree = vector(numCourses, 0);
for(vector<int> prereq : prerequisites) {
dependencies[prereq[1]].push_back(prereq[0]);
indegree[prereq[0]]++;
}
vector<int> resp;
queue<int> q;
for(int course = 0; course < numCourses; course++) {
if(indegree[course] == 0) {
q.push(course);
}
}
while(!q.empty()) {
int course = q.front();
q.pop();
resp.push_back(course);
for(int nextCourse : dependencies[course]) {
indegree[nextCourse]--;
if(indegree[nextCourse] == 0) {
q.push(nextCourse);
}
}
}
if(resp.size() != numCourses) {
resp = {};
}
return(resp);
}
};