#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define N 10010
typedef pair<int,int> PAIR;
int n, m;
int low[N], dep[N], ans[N], cnt, num;
vector<PAIR> map[N];
void dfs( int road, int u ){
low[u]= cnt++; dep[u]= low[u];
for( int i= 0; i< map[u].size(); ++i ){
int v= map[u][i].first, r= map[u][i].second;
if( low[v]== 0 ){
dfs( r, v );
if( low[v]< low[u] ) low[u]= low[v];
if( low[v]> dep[u] ) ans[num++]= r;
}
else if( road && low[v]< low[u] ) low[u]= low[v];
}
}
int main(){
int test;
scanf("%d",&test );
for( int t= 1; t<= test; ++t ){
scanf("%d%d",&n,&m);
for( int i= 1; i<= m; ++i ){
int x, y;
scanf("%d%d",&x,&y);
map[x].push_back( PAIR(y,i) );
map[y].push_back( PAIR(x,i) );
}
cnt= 1; num= 0;
for( int i= 0; i<= n; ++i ){
low[i]= 0; dep[i]= 0; }
dfs( -1, 1 );
sort( ans, ans+ num );
printf("%d\n", num );
if( num ){
printf("%d", ans[0] );
for( int i= 1; i< num; ++i ) printf(" %d", ans[i] );
puts("");
}
if( t< test ) puts("");
for( int i= 0; i<= n; ++i ) map[i].clear();
}
return 0;
}
|