K.Link-Cut Tree
 
- 思路 
  
- 按从小到大的边的顺序加边,每加一次边查看是否有环,有环马上进行bfs找环并输出答案
 - 具体看注释,写的应该挺详细
 
  - 学到的东西 
  
- 如何找环并输出环
 - 利用并查集可以在O(1)时间内判断图中是否有环,学习!!!
 
  
 
bool merge(int x,int y,int w){
    if (find(x) == find(y)) {return 1; } 
    g[x].push_back({y,w}); 
    g[y].push_back({x,w});
    fa[find(x)] = find(y); 
    return 0; 
}
 
  - 多测试样例的初始化要非常谨慎!!!
 
 
const int maxn = 2e5 + 10;
int inf = 0x3f3f3f3f - 10;
int fa[maxn]; 
vector<int> faa[maxn]; 
struct edge{ 
    int u,v,w;
};
struct edge2{ 
    int to,w;
};
vector<edge2> g[maxn]; 
vector<edge> vv; 
int vis[maxn]; 
void init(int n){ 
    vv.clear();
    forr(i,1,n) {
        fa[i] = i; vis[i] = 0;
        faa[i] = {0,0};
        g[i].clear();
    }
}
int find(int x){return fa[x]==x ? x : fa[x]=find(fa[x]);}
bool merge(int x,int y,int w){
    if (find(x) == find(y)) {return 1; } 
    g[x].push_back({y,w}); 
    g[y].push_back({x,w});
    fa[find(x)] = find(y); 
    return 0; 
}
void bfs(int s,int e,int ww){ 
    vector<int> ans;
    ans.push_back(ww); 
    queue<int> q;
    q.push(s);
    while (!q.empty()){
        int ss = q.front();
        q.pop();
        vis[ss] = 1;
        auto sz = g[ss].size(); 
        for (int i = 0; i < sz; ++i) { 
            int to = g[ss][i].to,w = g[ss][i].w;
            if (!vis[to]){
                faa[to] = {ss,w};
                q.push(to);
                if (to==e) goto jump; 
            }
        }
    }
    jump:
    int now = e;
    while (now!=s){
        ans.push_back(faa[now][1]);
        now = faa[now][0];
    }
    sort(ans.begin(),ans.end());
    for (int i = 0; i < ans.size()-1; ++i) {
        cout<<ans[i]<<" ";
    }
    cout<<ans[ans.size()-1]<<endl;
}
void solve() {
    int n,m;cin>>n>>m;
    for (int i = 1; i <=m ; ++i) { 
        int x,y;cin>>x>>y;
        vv.push_back({x,y,i});
    }
    init(n);
    for (int i = 0; i < m ; ++i) {
        edge t = vv[i];
        int u = t.u,v = t.v,w = t.w; 
        if (merge(u,v,w)){ 
                           
                           
            bfs(u,v,w); 
            return;
        }
    }
    cout<<-1<<endl; 
}
signed main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);
    std::cout.tie(0);
    int t = 1;
    cin >> t; 
    for (int i = 0; i < t; ++i) {
        solve();
    }
}