#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define sd(x) scanf("%d", &(x))
#define pii pair<int, int>
#define F first
#define S second
#define all(c) ((c).begin()), ((c).end())
#define sz(x) ((int)(x).size())
const int INF = 1 << 30;
void merge(vector<int> & a, vector<int> & b, int offset = 1){
if(b.empty()){
return;
}
if(a.empty()){
a = b;
return;
}
if(offset==1)assert(a.back() == b[0]);
copy(b.begin() + offset, b.end(), back_inserter(a));
}
struct graph {
int n;
vector<vector<int>> adj, rdj, dist, prv;
graph(int n) : n(n), adj(n), rdj(n), dist(n), prv(n){ }
void add_edge(int src, int dst) {
adj[src].push_back(dst);
rdj[dst].push_back(src);
}
vector<vector<int>> strongly_connected_components() { // kosaraju
vector<int> ord, visited(n);
vector<vector<int>> scc;
function<void(int,vector<vector<int>>&, vector<int>&)> dfs
= [&](int u, vector<vector<int>> &adj, vector<int> &out) {
visited[u] = true;
for (int v: adj[u])
if (!visited[v]) dfs(v, adj, out);
out.push_back(u);
};
for (int u = 0; u < n; ++u)
if (!visited[u]) dfs(u, adj, ord);
fill(all(visited), false);
for (int i = n-1; i >= 0; --i)
if (!visited[ord[i]])
scc.push_back({}), dfs(ord[i], rdj, scc.back());
return scc;
}
void bfs(int s){
dist[s].assign(n, INF);
prv[s].assign(n, -1);
dist[s][s] = 0;
queue<int> q; q.push(s);
while(!q.empty()){
int u = q.front();
q.pop();
for(int v : adj[u]) if(dist[s][v] == INF){
dist[s][v] = dist[s][u] + 1;
prv[s][v] = u;
q.push(v);
}
}
}
vector<int> getPath(int a, int b){
int curr = b;
vector<int> ret;
while(curr != a){
ret.push_back(curr);
curr = prv[a][curr];
}
ret.push_back(a);
reverse(all(ret));
return ret;
}
void precompute(){
for(int i= 0; i < n; i++)bfs(i);
}
vector<int> go_scc(vector<int> nodes, int st, int en){
if(sz(nodes) == 1){
return nodes;
}
int a = -1, b = -1, mx = -1;
for(int i : nodes) for(int j : nodes) if(dist[i][j] > mx || (dist[i][j] == mx && i == st)){
mx = dist[i][j];
a = i, b = j;
}
vector<int> walk = getPath(a, b);
set<int> vis;
for(int it : walk) vis.insert(it);
for(int i : nodes) if(!vis.count(i)){
vector<int> now = getPath(walk.back(), i);
merge(walk, now);
}
b = walk.back();
if( (st == -1 || st == a) && (en == -1 || en == b)) return walk;
vector<int> lft, rgt;
if(en != -1 && dist[b][en] == mx){
vector<int> rev_walk = getPath(b, en);
reverse(all(rev_walk));
vis.clear();
for(auto it : rev_walk) vis.insert(it);
for(int i : nodes) if(!vis.count(i)){
vector<int> now = getPath(i, rev_walk.back());
reverse(all(now));
merge(rev_walk, now);
}
if(st != -1){
vector<int> now = getPath(st, rev_walk.back());
reverse(all(now));
merge(rev_walk, now);
}
reverse(all(rev_walk));
return rev_walk;
} else{
if(st != -1) lft = getPath(st, walk[0]);
if(en != -1) rgt = getPath(walk.back(), en);
merge(lft, walk);
merge(lft, rgt);
return lft;
}
}
vector<int> getWalk(){
precompute();
vector<vector<int>> scc = strongly_connected_components();
vector<int> where(n, -1);
for(int i = 0; i < sz(scc); i++) for(int j : scc[i]) where[j] = i;
vector<pii> edge(n, {-1, -1});
for(int i = 0; i < n; i++) for(int j : adj[i]){
if(where[j] == where[i] + 1) edge[where[i]] = {i, j};
}
for(int i = 0; i + 1 < sz(scc); i++) if(edge[i].F == -1) return {};
vector<int> walk;
for(int i = 0; i < sz(scc); i++){
int st = i == 0 ? -1 : edge[i - 1].S;
int en = i == sz(scc) - 1 ? -1 : edge[i].F;
vector<int> now = go_scc(scc[i], st, en);
merge(walk, now, 0);
}
return walk;
}
};
int main(){
int t; sd(t);
while(t--){
int n, m;
sd(n); sd(m);
graph g(n);
for(int i = 0; i < m; i++){
int u, v; sd(u); sd(v); u--; v--;
g.add_edge(u, v);
}
vector<int> walk = g.getWalk();
if(walk.empty()){
printf("-1\n");
continue;
}
printf("%d ", sz(walk) - 1);
for(auto it : walk) printf("%d ", it + 1);
printf("\n");
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIHNkKHgpIHNjYW5mKCIlZCIsICYoeCkpCiNkZWZpbmUgcGlpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgRiBmaXJzdAojZGVmaW5lIFMgc2Vjb25kCiNkZWZpbmUgYWxsKGMpICgoYykuYmVnaW4oKSksICgoYykuZW5kKCkpCiNkZWZpbmUgc3ooeCkgKChpbnQpKHgpLnNpemUoKSkKCmNvbnN0IGludCBJTkYgPSAxIDw8IDMwOwoKdm9pZCBtZXJnZSh2ZWN0b3I8aW50PiAmIGEsIHZlY3RvcjxpbnQ+ICYgYiwgaW50IG9mZnNldCA9IDEpewogICAgaWYoYi5lbXB0eSgpKXsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpZihhLmVtcHR5KCkpewogICAgICAgIGEgPSBiOwogICAgICAgIHJldHVybjsKICAgIH0KICAgIGlmKG9mZnNldD09MSlhc3NlcnQoYS5iYWNrKCkgPT0gYlswXSk7CiAgICBjb3B5KGIuYmVnaW4oKSArIG9mZnNldCwgYi5lbmQoKSwgYmFja19pbnNlcnRlcihhKSk7Cn0KCnN0cnVjdCBncmFwaCB7CiAgaW50IG47CiAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBhZGosIHJkaiwgZGlzdCwgcHJ2OwogIGdyYXBoKGludCBuKSA6IG4obiksIGFkaihuKSwgcmRqKG4pLCBkaXN0KG4pLCBwcnYobil7IH0KICB2b2lkIGFkZF9lZGdlKGludCBzcmMsIGludCBkc3QpIHsKICAgIGFkaltzcmNdLnB1c2hfYmFjayhkc3QpOwogICAgcmRqW2RzdF0ucHVzaF9iYWNrKHNyYyk7CiAgfQoKICB2ZWN0b3I8dmVjdG9yPGludD4+IHN0cm9uZ2x5X2Nvbm5lY3RlZF9jb21wb25lbnRzKCkgeyAvLyBrb3NhcmFqdQogICAgdmVjdG9yPGludD4gb3JkLCB2aXNpdGVkKG4pOwogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBzY2M7CiAgICBmdW5jdGlvbjx2b2lkKGludCx2ZWN0b3I8dmVjdG9yPGludD4+JiwgdmVjdG9yPGludD4mKT4gZGZzIAogICAgICA9IFsmXShpbnQgdSwgdmVjdG9yPHZlY3RvcjxpbnQ+PiAmYWRqLCB2ZWN0b3I8aW50PiAmb3V0KSB7CiAgICAgIHZpc2l0ZWRbdV0gPSB0cnVlOwogICAgICBmb3IgKGludCB2OiBhZGpbdV0pIAogICAgICAgIGlmICghdmlzaXRlZFt2XSkgZGZzKHYsIGFkaiwgb3V0KTsKICAgICAgb3V0LnB1c2hfYmFjayh1KTsKICAgIH07CiAgICBmb3IgKGludCB1ID0gMDsgdSA8IG47ICsrdSkKICAgICAgaWYgKCF2aXNpdGVkW3VdKSBkZnModSwgYWRqLCBvcmQpOwogICAgZmlsbChhbGwodmlzaXRlZCksIGZhbHNlKTsKICAgIGZvciAoaW50IGkgPSBuLTE7IGkgPj0gMDsgLS1pKSAKICAgICAgaWYgKCF2aXNpdGVkW29yZFtpXV0pIAogICAgICAgIHNjYy5wdXNoX2JhY2soe30pLCBkZnMob3JkW2ldLCByZGosIHNjYy5iYWNrKCkpOyAKICAgIHJldHVybiBzY2M7CiAgfQoKICAgIHZvaWQgYmZzKGludCBzKXsKICAgICAgICBkaXN0W3NdLmFzc2lnbihuLCBJTkYpOwogICAgICAgIHBydltzXS5hc3NpZ24obiwgLTEpOwogICAgICAgIGRpc3Rbc11bc10gPSAwOwogICAgICAgIHF1ZXVlPGludD4gcTsgcS5wdXNoKHMpOwogICAgICAgIHdoaWxlKCFxLmVtcHR5KCkpewogICAgICAgICAgICBpbnQgdSA9IHEuZnJvbnQoKTsKICAgICAgICAgICAgcS5wb3AoKTsKICAgICAgICAgICAgZm9yKGludCB2IDogYWRqW3VdKSBpZihkaXN0W3NdW3ZdID09IElORil7CiAgICAgICAgICAgICAgICBkaXN0W3NdW3ZdID0gZGlzdFtzXVt1XSArIDE7CiAgICAgICAgICAgICAgICBwcnZbc11bdl0gPSB1OwogICAgICAgICAgICAgICAgcS5wdXNoKHYpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHZlY3RvcjxpbnQ+IGdldFBhdGgoaW50IGEsIGludCBiKXsKICAgICAgICBpbnQgY3VyciA9IGI7CiAgICAgICAgdmVjdG9yPGludD4gcmV0OwogICAgICAgIHdoaWxlKGN1cnIgIT0gYSl7CiAgICAgICAgICAgIHJldC5wdXNoX2JhY2soY3Vycik7CiAgICAgICAgICAgIGN1cnIgPSBwcnZbYV1bY3Vycl07CiAgICAgICAgfQogICAgICAgIHJldC5wdXNoX2JhY2soYSk7CiAgICAgICAgcmV2ZXJzZShhbGwocmV0KSk7CiAgICAgICAgcmV0dXJuIHJldDsKICAgIH0KCiAgICB2b2lkIHByZWNvbXB1dGUoKXsKICAgICAgICBmb3IoaW50IGk9IDA7IGkgPCBuOyBpKyspYmZzKGkpOwogICAgfQoKICAgIHZlY3RvcjxpbnQ+IGdvX3NjYyh2ZWN0b3I8aW50PiBub2RlcywgaW50IHN0LCBpbnQgZW4pewogICAgICAgIGlmKHN6KG5vZGVzKSA9PSAxKXsKICAgICAgICAgICAgcmV0dXJuIG5vZGVzOwogICAgICAgIH0KICAgICAgICBpbnQgYSA9IC0xLCBiID0gLTEsIG14ID0gLTE7CiAgICAgICAgZm9yKGludCBpIDogbm9kZXMpIGZvcihpbnQgaiA6IG5vZGVzKSBpZihkaXN0W2ldW2pdID4gbXggfHwgKGRpc3RbaV1bal0gPT0gbXggJiYgaSA9PSBzdCkpewogICAgICAgICAgICBteCA9IGRpc3RbaV1bal07CiAgICAgICAgICAgIGEgPSBpLCBiID0gajsKICAgICAgICB9CiAgICAgICAgdmVjdG9yPGludD4gd2FsayA9IGdldFBhdGgoYSwgYik7CiAgICAgICAgc2V0PGludD4gdmlzOwogICAgICAgIGZvcihpbnQgaXQgOiB3YWxrKSB2aXMuaW5zZXJ0KGl0KTsKICAgICAgICBmb3IoaW50IGkgOiBub2RlcykgaWYoIXZpcy5jb3VudChpKSl7CiAgICAgICAgICAgIHZlY3RvcjxpbnQ+IG5vdyA9IGdldFBhdGgod2Fsay5iYWNrKCksIGkpOwogICAgICAgICAgICBtZXJnZSh3YWxrLCBub3cpOwogICAgICAgIH0KICAgICAgICBiID0gd2Fsay5iYWNrKCk7CiAgICAgICAgaWYoIChzdCA9PSAtMSB8fCBzdCA9PSBhKSAmJiAoZW4gPT0gLTEgfHwgZW4gPT0gYikpIHJldHVybiB3YWxrOwogICAgICAgIHZlY3RvcjxpbnQ+IGxmdCwgcmd0OwogICAgICAgIGlmKGVuICE9IC0xICYmIGRpc3RbYl1bZW5dID09IG14KXsKICAgICAgICAgICAgdmVjdG9yPGludD4gcmV2X3dhbGsgPSBnZXRQYXRoKGIsIGVuKTsKICAgICAgICAgICAgcmV2ZXJzZShhbGwocmV2X3dhbGspKTsKICAgICAgICAgICAgdmlzLmNsZWFyKCk7CiAgICAgICAgICAgIGZvcihhdXRvIGl0IDogcmV2X3dhbGspIHZpcy5pbnNlcnQoaXQpOwogICAgICAgICAgICBmb3IoaW50IGkgOiBub2RlcykgaWYoIXZpcy5jb3VudChpKSl7CiAgICAgICAgICAgICAgICB2ZWN0b3I8aW50PiBub3cgPSBnZXRQYXRoKGksIHJldl93YWxrLmJhY2soKSk7CiAgICAgICAgICAgICAgICByZXZlcnNlKGFsbChub3cpKTsKICAgICAgICAgICAgICAgIG1lcmdlKHJldl93YWxrLCBub3cpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmKHN0ICE9IC0xKXsKICAgICAgICAgICAgICAgIHZlY3RvcjxpbnQ+IG5vdyA9IGdldFBhdGgoc3QsIHJldl93YWxrLmJhY2soKSk7CiAgICAgICAgICAgICAgICByZXZlcnNlKGFsbChub3cpKTsKICAgICAgICAgICAgICAgIG1lcmdlKHJldl93YWxrLCBub3cpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldmVyc2UoYWxsKHJldl93YWxrKSk7CiAgICAgICAgICAgIHJldHVybiByZXZfd2FsazsKICAgICAgICB9IGVsc2V7CiAgICAgICAgICAgIGlmKHN0ICE9IC0xKSBsZnQgPSBnZXRQYXRoKHN0LCB3YWxrWzBdKTsKICAgICAgICAgICAgaWYoZW4gIT0gLTEpIHJndCA9IGdldFBhdGgod2Fsay5iYWNrKCksIGVuKTsKICAgICAgICAgICAgbWVyZ2UobGZ0LCB3YWxrKTsKICAgICAgICAgICAgbWVyZ2UobGZ0LCByZ3QpOwogICAgICAgICAgICByZXR1cm4gbGZ0OyAKICAgICAgICB9CiAgICB9CiAgICB2ZWN0b3I8aW50PiBnZXRXYWxrKCl7CiAgICAgICAgcHJlY29tcHV0ZSgpOwogICAgICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gc2NjID0gc3Ryb25nbHlfY29ubmVjdGVkX2NvbXBvbmVudHMoKTsKICAgICAgICB2ZWN0b3I8aW50PiB3aGVyZShuLCAtMSk7CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHN6KHNjYyk7IGkrKykgZm9yKGludCBqIDogc2NjW2ldKSB3aGVyZVtqXSA9IGk7CiAgICAgICAgdmVjdG9yPHBpaT4gZWRnZShuLCB7LTEsIC0xfSk7CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG47IGkrKykgZm9yKGludCBqIDogYWRqW2ldKXsKICAgICAgICAgICAgaWYod2hlcmVbal0gPT0gd2hlcmVbaV0gKyAxKSBlZGdlW3doZXJlW2ldXSA9IHtpLCBqfTsKICAgICAgICB9CiAgICAgICAgZm9yKGludCBpID0gMDsgaSArIDEgPCBzeihzY2MpOyBpKyspIGlmKGVkZ2VbaV0uRiA9PSAtMSkgcmV0dXJuIHt9OwogICAgICAgIHZlY3RvcjxpbnQ+IHdhbGs7CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHN6KHNjYyk7IGkrKyl7CiAgICAgICAgICAgIGludCBzdCA9IGkgPT0gMCA/IC0xIDogZWRnZVtpIC0gMV0uUzsKICAgICAgICAgICAgaW50IGVuID0gaSA9PSBzeihzY2MpIC0gMSA/IC0xIDogZWRnZVtpXS5GOwogICAgICAgICAgICB2ZWN0b3I8aW50PiBub3cgPSBnb19zY2Moc2NjW2ldLCBzdCwgZW4pOwogICAgICAgICAgICBtZXJnZSh3YWxrLCBub3csIDApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gd2FsazsKICAgIH0KfTsKCmludCBtYWluKCl7CiAgICBpbnQgdDsgc2QodCk7CiAgICB3aGlsZSh0LS0pewogICAgICAgIGludCBuLCBtOwogICAgICAgIHNkKG4pOyBzZChtKTsKICAgICAgICBncmFwaCBnKG4pOwogICAgICAgIGZvcihpbnQgaSA9IDA7IGkgPCBtOyBpKyspewogICAgICAgICAgICBpbnQgdSwgdjsgc2QodSk7IHNkKHYpOyB1LS07IHYtLTsKICAgICAgICAgICAgZy5hZGRfZWRnZSh1LCB2KTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgdmVjdG9yPGludD4gd2FsayA9IGcuZ2V0V2FsaygpOwogICAgICAgIGlmKHdhbGsuZW1wdHkoKSl7CiAgICAgICAgICAgIHByaW50ZigiLTFcbiIpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgcHJpbnRmKCIlZCAiLCBzeih3YWxrKSAtIDEpOwogICAgICAgIGZvcihhdXRvIGl0IDogd2FsaykgcHJpbnRmKCIlZCAiLCBpdCArIDEpOwogICAgICAgIHByaW50ZigiXG4iKTsKICAgIH0KfQ==