rt , Orz
P7771
#include <bits/stdc++.h>
using namespace std;
int n, m;
const int maxn = 1e5 + 1, maxm = 2e5 + 1;
vector<int> e[maxn];
int in_[maxn] = {}, out_[maxn] = {}, start[maxn] = {};
int min_ver = 1e9;
int st[maxn] = {}, top = 0;
bool judge(int &s){
int cnt_start = 0, cnt_end = 0;
bool flag = true;
for(int i = 1; i <= n; ++i){
if(in_[i] == out_[i]) continue;
else if(in_[i] + 1 == out_[i]){
s = i;
flag = false;
++cnt_start;
}
else if(in_[i] == out_[i] + 1){
flag = false;
++cnt_end;
}
else return false;
}
//
if(flag){
s = min_ver;
return true;
}else{
if(cnt_end == 1 && cnt_start == 1) return true;
else return false;
}
}
void dfs(int u){
for(int i = start[u]; i < e[u].size();i = start[u]){
++start[u];
dfs(e[u][i]);
}
st[++top] = u;
}
int main(){
// freopen("P7771_7.in", "r", stdin);
cin >> n >> m;
for(int i = 1; i <= m; ++i){
int u, v;
scanf("%d%d", &u, &v);
e[u].push_back(v);
++in_[v];
++out_[u];
min_ver = min(min_ver, min(v, u));
}
for(int i = 1; i <= n; ++i) sort(e[i].begin(), e[i].end());
int s = min_ver;
if(!judge(s)){
cout << "No";
} return 0;
// printf("s:%d\n", s);
// s = 1;
dfs(s);
for(int i = top; i >= 1; --i) printf("%d ", st[i]);
return 0;
}