#include<stdio.h>
#define N 1001
#define inf 0x3f3f3f3f
#define M 10001
int c[N],s[N],i,j,n,m,k,l,x,y,z,f[N],t[N],at[2][N],sol[M];
struct leg{
int i,c,nr;
leg *adr;
} *a[N],*p;
FILE *in,*out;
int ajunge(){
int p,u,i,j,l,cs;
leg *r;
for(i=1;i-n-1;i++)
s[i]=1;
p=u=1;c[1]=1;s[1]=0;f[1]=inf;
while(p-u-1){
i=c[p++];
for(r=a[i];r!=0;r=r->adr)
if(s[(j=r->i)]&&(cs=r->c)){
c[++u]=j;s[j]=0;
if(f[i]>=cs)
f[j]=cs;
else
f[j]=f[i];
t[j]=i;
if(!(j-n))
return 1;
}
}
return 0;
}
void intoarce(){
int i,j;
leg *p;
i=n;
while(i-1){
j=t[i];
for(p=a[i];p->i-j;p=p->adr);
p->c-=f[n];
for(p=a[j];p->i-i;p=p->adr);
p->c-=f[n];
i=j;
}
}
void coada(int ss,int v){
int p,u,i,j;
leg *r;
for(i=1;i<=n;i++)
s[i]=1;
p=u=1;c[1]=ss;s[ss]=0;
while(p-u-1){
i=c[p++];
for(r=a[i];r!=0;r=r->adr)
if(r->c&&s[(j=r->i)]){
c[++u]=j;
s[j]=0;
}
}
for(i=1;i<=n;i++)
if(!s[i])
at[v][i]=1;
}
int main(){
in=fopen("critice.in","rt");
out=fopen("critice.out","wt");
fscanf(in,"%d%d",&n,&m);
for(i=1;i-1-m;i++){
fscanf(in,"%d%d%d",&x,&y,&z);
p=new leg;p->i=y;p->c=z;p->nr=i;p->adr=a[x];a[x]=p;
p=new leg;p->i=x;p->c=z;p->nr=i;p->adr=a[y];a[y]=p;
}
while(ajunge())
intoarce();
coada(1,0);
coada(n,1);
l=0;
for(i=1;i<=n;i++)
for(p=a[i];p!=0;p=p->adr)
if((at[0][i]&&at[1][(j=p->i)])||(at[1][i]&&at[0][j]))
sol[p->nr]=1,l++;
fprintf(out,"%d\n",l);
for(i=1;i<=m;i++)
if(sol[i])
fprintf(out,"%d\n",i);
return 0;
}