#include<bits/stdc++.h>
using namespace std;
struct node{
int to,next;
}a[100010];
int head[100010],in[100010],num[100010],temp,cnt;
priority_queue<int> q;
void init()
{
temp=cnt=0;
memset(a,0,sizeof(a));
memset(in,0,sizeof(in));
memset(head,0,sizeof(0));
memset(num,0,sizeof(0));
}
void add(int u,int v)
{
a[++cnt].to=v;
a[cnt].next=head[u];
head[u]=cnt;
}
int main()
{
int T,n,m,u,v;
cin>>T;
while(T--)
{
init();
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>u>>v;
add(v,u);
in[u]++;
}
for(int i=1;i<=n;i++)
{
if(!in[i])
q.push(i);
}
while(!q.empty())
{
u=q.top();
q.pop();
for(int i=head[u];i;i=a[i].next)//错误点
{
in[a[i].to]--;
if(in[a[i].to]==0)
q.push(a[i].to);
}
num[++temp]=u;
}
if(temp<n)
cout<<"Impossible!\n";
else{
for(int i=n;i;i--)
cout<<num[i]<<" ";
cout<<"\n";
}
}
return 0;
}
不知道为什么a[i].next==i导致了死循环