#include<bits/stdc++.h>
using namespace std;

#define MAX 100000
#define WHITE 0
#define GRAY 1
#define BLACK 2

// プロトタイプ宣言
void tSort();
void dfs(int s);
// ここまでプロトタイプ宣言


int v,e;
vector<int> Graph[MAX];
int color[MAX];
list<int> out;

int main(){

	for(int i=0;i<MAX;i++){
		color[i]=WHITE;
	}

	cin>>v>>e;
	int from,to;
	for(int i=0;i<e;i++){
		cin>>from>>to;
		Graph[from].push_back(to);
	}

	tSort();

	for(list<int>::iterator it=out.begin();	it!=out.end();	it++){
		cout<< *it <<endl;
	}

	return 0;
}

void dfs(int s){
	color[s]=GRAY;

	for(int next: Graph[s]){
		if(color[next]==WHITE) dfs(next);
	}
	out.push_front(s);
}

void tSort(){
	for(int s=0;s<v;s++){
		if(color[s]==WHITE){
			dfs(s);
		}
	}
}

