#define gc() (*_pinp?*_pinp++:(_inp[fread(_pinp=_inp, 1, 4096, stdin)]='\0', *_pinp++))
char _inp[4097], *_pinp=_inp, _; bool _ssign;
#define nextInt(x) do{while((x=gc())<'-'); _ssign=x=='-'; if(_ssign) while((x=gc())<'0'); for(x-='0'; '0'<=(_=gc()); x=(x<<3)+(x<<1)+_-'0'); x=_ssign?-x:x;}while(0)
#include <cstdio>
#include <vector>
using namespace std;
int N, M;
int p[100001], r[100001]; // parent, rank
int size[150];
void MAKE_SET(int x) {
p[x]=x;
r[x]=0;
size[x]=1;
}
int FIND_SET(int x) {
if (p[x]!=x)
p[x]=FIND_SET(p[x]);
return p[x];
}
void UNION(int x, int y) {
int xr=FIND_SET(x);
int yr=FIND_SET(y);
if (xr==yr) return;
if (r[xr]<r[yr]) {
p[xr]=yr;
size[yr]+=size[xr];
} else if (r[xr]>r[yr]) {
p[yr]=xr;
size[xr]+=size[yr];
} else {
p[yr]=xr;
r[xr]++;
size[xr]+=size[yr];
}
}
vector<int> a;
int main() {
nextInt(N);
nextInt(M);
for (int i=0; i<N; i++)
MAKE_SET(i);
for (int i=0; i<M; i++) {
int u, v;
nextInt(u);
nextInt(v);
if (FIND_SET(u)!=FIND_SET(v)) {
a.push_back(i+1);
UNION(u, v);
}
}
printf("%d\n", size[FIND_SET(6)]);
int p=FIND_SET(0);
for (int i=0; i<N; i++) {
if (p!=FIND_SET(i)) {printf("Disconnected Graph\n"); return 0;}
}
for (int i=0; i<a.size(); i++)
printf("%i\n", a[i]);
return 0;
}
I2RlZmluZSBnYygpICgqX3BpbnA/Kl9waW5wKys6KF9pbnBbZnJlYWQoX3BpbnA9X2lucCwgMSwgNDA5Niwgc3RkaW4pXT0nXDAnLCAqX3BpbnArKykpCmNoYXIgX2lucFs0MDk3XSwgKl9waW5wPV9pbnAsIF87IGJvb2wgX3NzaWduOwojZGVmaW5lIG5leHRJbnQoeCkgZG97d2hpbGUoKHg9Z2MoKSk8Jy0nKTsgX3NzaWduPXg9PSctJzsgaWYoX3NzaWduKSB3aGlsZSgoeD1nYygpKTwnMCcpOyBmb3IoeC09JzAnOyAnMCc8PShfPWdjKCkpOyB4PSh4PDwzKSsoeDw8MSkrXy0nMCcpOyB4PV9zc2lnbj8teDp4O313aGlsZSgwKQojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwppbnQgTiwgTTsKaW50IHBbMTAwMDAxXSwgclsxMDAwMDFdOyAvLyBwYXJlbnQsIHJhbmsKaW50IHNpemVbMTUwXTsKdm9pZCBNQUtFX1NFVChpbnQgeCkgewoJcFt4XT14OwoJclt4XT0wOwoJc2l6ZVt4XT0xOwp9CmludCBGSU5EX1NFVChpbnQgeCkgewoJaWYgKHBbeF0hPXgpCgkJcFt4XT1GSU5EX1NFVChwW3hdKTsKCXJldHVybiBwW3hdOwp9CnZvaWQgVU5JT04oaW50IHgsIGludCB5KSB7CglpbnQgeHI9RklORF9TRVQoeCk7CglpbnQgeXI9RklORF9TRVQoeSk7CglpZiAoeHI9PXlyKSByZXR1cm47CglpZiAoclt4cl08clt5cl0pIHsKCQlwW3hyXT15cjsKCQlzaXplW3lyXSs9c2l6ZVt4cl07Cgl9IGVsc2UgaWYgKHJbeHJdPnJbeXJdKSB7CgkJcFt5cl09eHI7CgkJc2l6ZVt4cl0rPXNpemVbeXJdOwoJfSBlbHNlIHsKCQlwW3lyXT14cjsKCQlyW3hyXSsrOwoJCXNpemVbeHJdKz1zaXplW3lyXTsKCX0KfQp2ZWN0b3I8aW50PiBhOwppbnQgbWFpbigpIHsKICAgIG5leHRJbnQoTik7CiAgICBuZXh0SW50KE0pOwoJZm9yIChpbnQgaT0wOyBpPE47IGkrKykKCQlNQUtFX1NFVChpKTsKCWZvciAoaW50IGk9MDsgaTxNOyBpKyspIHsKCQlpbnQgdSwgdjsKCQluZXh0SW50KHUpOwoJCW5leHRJbnQodik7CgkJaWYgKEZJTkRfU0VUKHUpIT1GSU5EX1NFVCh2KSkgewoJCQlhLnB1c2hfYmFjayhpKzEpOwoJCQlVTklPTih1LCB2KTsKCQl9Cgl9CgkgICBwcmludGYoIiVkXG4iLCBzaXplW0ZJTkRfU0VUKDYpXSk7CglpbnQgcD1GSU5EX1NFVCgwKTsKCWZvciAoaW50IGk9MDsgaTxOOyBpKyspIHsKCQlpZiAocCE9RklORF9TRVQoaSkpIHtwcmludGYoIkRpc2Nvbm5lY3RlZCBHcmFwaFxuIik7IHJldHVybiAwO30KCX0KCWZvciAoaW50IGk9MDsgaTxhLnNpemUoKTsgaSsrKQoJICAgIHByaW50ZigiJWlcbiIsIGFbaV0pOwoJcmV0dXJuIDA7Cn0=