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