#include <iostream>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include <stack>
using namespace std;

unordered_map<int, unordered_set<int>> g;

void addEdge(int x, int y) {
	g[x].insert(y);
}

void topSort() {
	unordered_set<int> visited;
	stack<int> mainStack;
	
	for(auto it = g.begin(); it != g.end(); it++) {
		if(visited.count(it->first) == 0) {
			visited.insert(it->first);
			stack<int> locStack;
			locStack.push(it->first);
			while(!locStack.empty()) {
				int curr = locStack.top();
				bool unVisCh = false;
				for(auto it2 = g[curr].begin(); it2 != g[curr].end(); it2++) {
					int child = *it2;
					if(visited.count(child) == 0) {
						unVisCh = true;
						visited.insert(child);
						locStack.push(child);
					}
				}
				if(!unVisCh) {
					locStack.pop();
					mainStack.push(curr);
				}
			}
		}
	}
	
	while(!mainStack.empty()) {
		cout<<mainStack.top()<<" ";
		mainStack.pop();
	}
	cout<<endl;
}

int main() {
	addEdge(1,2);
	addEdge(4,5);
	addEdge(5,6);
	addEdge(3,2);
	addEdge(2,6);
	addEdge(1,3);
	addEdge(4,3);
	
	topSort();

	return 0;
}