#include <iostream>
#include <vector>
using namespace std;
int adj[5][5] = {
{1,1,0,1,0},
{0,1,1,1,0},
{0,0,1,0,1},
{0,0,1,1,1},
{0,0,0,0,1}
};
vector<int> order;
vector<bool> marked;
void DFS(int idx) {
marked[idx] = true;
for(int j = 0 ; j < 5 ; ++j) {
if(!marked[j] && adj[idx][j] == 1) {
DFS(j);
}
}
order.insert(order.begin(),idx);
}
void topologicalSort(int n) {
marked.assign(n, false);
for(int i = 0 ; i < n ; ++i) {
if(!marked[i]) {
DFS(i);
}
}
}
int main(int argc, const char * argv[]) {
topologicalSort(5);
for(int i = 0 ; i < order.size() ;++i){
cout<< order[i] << " ";
}
cout<< endl;
return 0;
}