#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define endl "\n"
#define file(filename) freopen(filename".in","r",stdin),freopen(filename".out","w",stdout)
#define debug(x) cout<<#x<<"="<<x<<endl
const int MAXN=1e5+5;
vector<int>edge[MAXN];
int n,m;
int ans[MAXN],vis[MAXN];
void dfs(int i,int a){
if(ans[i]==0){
ans[i]=a;
for(int j1=0;j1<vis[i];j1++){
int j=edge[i][j1];
if(ans[j]==0){
dfs(j,a);
}
}
}
else{
return ;
}
}
int main(){
cin>>n>>m;
int u,v;
// memset(ans,-1,sizeof(ans));
for(int i=0;i<m;i++){
cin>>u>>v;
if(u!=v) {
edge[v].push_back(u);
}
vis[v]++;
}
for(int i=n;i>0;i--){
dfs(i,i);
// cout<<ans[n-i+1]<<" ";
}
for(int i=0;i<n;i++){
cout<<ans[i+1]<<" ";
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define endl "\n"
#define file(filename) freopen(filename".in","r",stdin),freopen(filename".out","w",stdout)
#define debug(x) cout<<#x<<"="<<x<<endl
const int MAXN=1e5+5;
vector<int>edge[MAXN];
int n,m;
int ans[MAXN];
void dfs(int i,int a){
if(ans[i]==0){
ans[i]=a;
for(int j1=0;j1<edge[i].size();j1++)
dfs(edge[i][j1],a);
}
else{
return ;
}
}
int main(){
cin>>n>>m;
int u,v;
// memset(ans,-1,sizeof(ans));
for(int i=0;i<m;i++){
cin>>u>>v;
if(u!=v) {
edge[v].push_back(u);
}
}
for(int i=n;i>0;i--){
dfs(i,i);
// cout<<i<<" ";
// cout<<ans[n-i+1]<<" ";
}
for(int i=0;i<n;i++){
cout<<ans[i+1]<<" ";
}
return 0;
}
我觉得也没区别啊,为啥15行的vis[i]会越界