#include <iostream>
#include <vector>
#include <algorithm>
#include <list>
using namespace std;
static const int  MAX = 100000;

vector<int> G[MAX];
list<int> out;
bool V[MAX];
int n;

void dfs(int u){
    V[u]=true;
    for(int i=0;i<G[u].size();i++){
        int v =G[u][i];
        if(!V[v])dfs(v);
    }
    out.push_front(u);
}

int main(){
    int s,t,q;
    
    cin>>n>>q;
    
    for(int i=0;i<n;i++)V[i]=false;
    
    for(int i=0;i<q;i++){
        cin>>s>>t;
        G[s].push_back(t);
    }
    
    for(int i=0; i<n; i++){
        if(!V[i])dfs(i);
    }
    
    for(list<int>::iterator it =out.begin();it !=out.end();it++) cout<<*it<<endl;
    
    return 0;
}
