求求啦
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define re register
#define ull unsigned long long
#define il inline
inline void rd(ll &x){
x=0;
char ch;
for(ch=getchar();ch<'0'||ch>'9';ch=getchar());
for(;ch>='0'&&ch<='9';ch=getchar())
x=(x<<3)+(x<<1)+(ch&15);
}
ll sta[500005], top;
struct Edge{
ll v, b;
};
vector <Edge> e[100005];
ll n, m, u, v, idu[100005], odu[100005], flag, s, ff, t, del[100005];
bool cmp(Edge a, Edge b){
return a.v < b.v;
}
void add(ll u, ll v){
e[u].push_back(Edge{v, 0});
}
void dfs(ll x){
ll tot = e[x].size();
for (int i = del[x]; i < tot; i++){
ll v = e[x][i].v;
if (e[x][i].b) continue;
e[x][i].b = 1;
del[x] = i + 1;
dfs(v);
}
sta[++top] = x;
}
int main(){
rd(n), rd(m);
for (int i = 1; i <= m; i++){
rd(u), rd(v);
add(u, v);
odu[u]++, idu[v]++;
}
s = t = 1, flag = 0, ff = 0;
for (int i = n; i >= 1; i--){
sort (e[i].begin(), e[i].end(), cmp);
if (odu[i] == idu[i] + 1)
flag++, s = i;
if (idu[i] == odu[i] + 1)
ff++, t = i;
}
if (!((flag == 0 && ff == 0) || (flag == 1 && ff == 1))) return 0 & puts("No");
dfs(s);
while (top) printf ("%lld ", sta[top--]);
return 0;
}