#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
struct edge{
int u,v,next;
}e[1000010];
int cd[1000010],head[1000010],cnt,rd[1000010];
int add(int u,int v){
e[++cnt].u=u;
e[cnt].v=v;
e[cnt].next=head[u];
head[u]=cnt;
rd[v]++;
cd[u]++;
return 0;
}
int m,n;
struct aa{
queue <int> data;
int mi;
const bool operator<(const aa& rhs)const{
return mi>rhs.mi;
}
aa(queue<int> a){
data=a;
mi=0x7f7f7f7f;
while(!a.empty()){
mi=min(mi,a.front());
a.pop();
}
}
aa();
aa(int n){
data.push(n);
mi=n;
}
};
aa tppx(int s){
queue<int>q,ans;
q.push(s);
while(!q.empty()){
int u=q.front();
q.pop();
ans.push(u);
priority_queue<int> yet;
for(int i=head[u];i!=0;i=e[i].next){
int v=e[i].v;
rd[v]--;
if(rd[v]==0) yet.push(-v);
}
while(!yet.empty()){
q.push(-yet.top());
yet.pop();
}
}
aa an(ans);
return an;
}
void out(queue<int>q,queue<int> &to){
while(!q.empty()){
to.push(q.front());
q.pop();
}
}
void doit(){
memset(rd,0,sizeof(rd));
memset(cd,0,sizeof(cd));
memset(e,0,sizeof(e));
memset(head,0,sizeof(head));
cnt=0;
cin>>m>>n;
while(n--){
int u,v;
cin>>u>>v;
add(u,v);
}
priority_queue<aa>ans,ans1;
for(int i=1;i<=m;i++){
if(rd[i]==0&&cd[i]==0) ans.push((aa)i);
else if(rd[i]==0) ans.push(tppx(i));
}
int si=0;
ans1=ans;
while(!ans1.empty()){
si+=ans1.top().data.size();
ans1.pop();
}
if(si!=m) cout<<" "<<si<<"Impossible!";
else{
while(!ans.empty()){
aa p=ans.top();
ans.pop();
while(!p.data.empty()){
cout<<p.data.front()<<" ";
p.data.pop();
}
}
}
printf("\n");
}
int main(){
int tim;
cin>>tim;
while(tim--) doit();
}