C++代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int i,j,k,n,m,t,in[100500],vis[100500];
vector<int> v[100500],v2[100500],res,tmp[100500];
void chk(){
queue<int> q;
int sb=0;
for(i=1;i<=n;i++)if(!in[i])q.push(i);
while(!q.empty()){
sb++;k=q.front();q.pop();
for(auto i:v[k]){
in[i]--;
if(!in[i])q.push(i);
}
}
if(sb!=n){cout<<"Impossible!";exit(0);}
}
void dfs(int x,int fa){
if(fa!=x)tmp[fa].push_back(x);
for(auto i:v2[x]){
if(!vis[i])dfs(i,fa);
}
}
void fuck(int x){
dfs(x,x);
if(!tmp[x].empty())sort(tmp[x].begin(),tmp[x].end());
for(auto i:tmp[x]){
if(!vis[i])fuck(i);
}
vis[x]=1;
res.push_back(x);
tmp[x].clear();
}
int main(){
ios::sync_with_stdio(0);
cin>>n>>m;
for(i=1;i<=m;i++){
cin>>j>>k;
if(j==k){cout<<"Impossible!";return 0;}
v[j].push_back(k);
v2[k].push_back(j);
in[k]++;
}
chk();
for(i=1;i<=n;i++){
if(!vis[i])fuck(i);
}
for(i=0;i<n;i++){
cout<<res[i];
if(i!=n-1)cout<<' ';
}
}