由于有输出要求,所以用数组更加方便
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6 + 10;
vector<int> g[N];
int n, m, K;
int d[N],q[N];
bool topo() {
int h = 0;
int t = 0;
for (int i = 1; i <= n; ++i) {
if (!d[i]) q[t++] = i;
}
while (h < t) {
int u = q[h++];
for (auto v:g[u]) {
if (--d[v] == 0)
q[t++] = v;
}
}
return t == n;//队列里有n个元素
}
int main() {
ios::sync_with_stdio(0);
cin >> n >> m;
for (int i = 1, u, v; i <= m; ++i) { //有重边和自环
cin >> u >> v;
g[u].push_back(v);
g[v].push_back(u);
d[v]++;
}
if (!topo()) cout << "-1";//有环
else {
for (int i = 0; i < n; ++i) {
cout << q[i] << ' ';
}
}
return 0;
}