#include <bits/stdc++.h>
using namespace std;
vector<int> topo(vector<vector<int>> &adj){
vector<int> indegree(adj.size(), 0);
for (int i = 0; i < (int)adj.size(); i++) {
for (auto j : adj[i]) {
indegree[j]++;
}
}
priority_queue<int, vector<int>, greater<int>> ready;
for (int i = 0; i < (int)adj.size(); i++) {
if (indegree[i] == 0) {
ready.push(i);
}
}
vector<int> topo_sort;
while (!ready.empty()) {
int node = ready.top();
ready.pop();
topo_sort.push_back(node);
for (auto i : adj[node]) {
indegree[i]--;
if (indegree[i] == 0) {
ready.push(i);
}
}
}
return topo_sort;
}
void solve() {
int n, e;
cin >> n >> e;
vector<vector<int>> adj(n+1);
for (int i = 0; i < e; i++) {
int from, to;
cin >> from >> to;
adj[from].push_back(to);
}
vector<int> ans = topo(adj);
if (ans.size() != n+1) {
cout << "The graph has a cycle\n";
return;
}
for (int i = 0; i <(int) ans.size(); i++) {
cout << ans[i];
if (i != ans.size() - 1) {
cout << "->";
}
}
cout << "\n";
}
int main() {
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8aW50PiB0b3BvKHZlY3Rvcjx2ZWN0b3I8aW50Pj4gJmFkail7CiAgICB2ZWN0b3I8aW50PiBpbmRlZ3JlZShhZGouc2l6ZSgpLCAwKTsKICAgIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoaW50KWFkai5zaXplKCk7IGkrKykgewogICAgICAgIGZvciAoYXV0byBqIDogYWRqW2ldKSB7CiAgICAgICAgICAgIGluZGVncmVlW2pdKys7CiAgICAgICAgfQogICAgfQogICAgCiAgICBwcmlvcml0eV9xdWV1ZTxpbnQsIHZlY3RvcjxpbnQ+LCBncmVhdGVyPGludD4+IHJlYWR5OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAoaW50KWFkai5zaXplKCk7IGkrKykgewogICAgICAgIGlmIChpbmRlZ3JlZVtpXSA9PSAwKSB7CiAgICAgICAgICAgIHJlYWR5LnB1c2goaSk7CiAgICAgICAgfQogICAgfQogICAgCiAgICB2ZWN0b3I8aW50PiB0b3BvX3NvcnQ7CiAgICB3aGlsZSAoIXJlYWR5LmVtcHR5KCkpIHsKICAgICAgICBpbnQgbm9kZSA9IHJlYWR5LnRvcCgpOwogICAgICAgIHJlYWR5LnBvcCgpOwogICAgICAgIHRvcG9fc29ydC5wdXNoX2JhY2sobm9kZSk7CgogICAgICAgIGZvciAoYXV0byBpIDogYWRqW25vZGVdKSB7CiAgICAgICAgICAgIGluZGVncmVlW2ldLS07CiAgICAgICAgICAgIGlmIChpbmRlZ3JlZVtpXSA9PSAwKSB7CiAgICAgICAgICAgICAgICByZWFkeS5wdXNoKGkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICByZXR1cm4gdG9wb19zb3J0Owp9Cgp2b2lkIHNvbHZlKCkgewogICAgaW50IG4sIGU7CiAgICBjaW4gPj4gbiA+PiBlOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBhZGoobisxKTsKICAgIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlOyBpKyspIHsKICAgICAgICBpbnQgZnJvbSwgdG87CiAgICAgICAgY2luID4+IGZyb20gPj4gdG87CiAgICAgICAgYWRqW2Zyb21dLnB1c2hfYmFjayh0byk7CiAgICB9CiAgICAKICAgIHZlY3RvcjxpbnQ+IGFucyA9IHRvcG8oYWRqKTsKICAgIAogICAgaWYgKGFucy5zaXplKCkgIT0gbisxKSB7CiAgICAgICAgY291dCA8PCAiVGhlIGdyYXBoIGhhcyBhIGN5Y2xlXG4iOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8KGludCkgYW5zLnNpemUoKTsgaSsrKSB7CiAgICAgICAgY291dCA8PCBhbnNbaV07CiAgICAgICAgaWYgKGkgIT0gYW5zLnNpemUoKSAtIDEpIHsKICAgICAgICAgICAgY291dCA8PCAiLT4iOwogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgIlxuIjsKfQoKaW50IG1haW4oKSB7CiAgICBzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0=