#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
int T[100],C[100][100],F[100][100],N,M,m[100][2], T2[100], S, D;
int min(int a,int b)
{return (a > b ? b : a);}
int BF(int s,int d)
{int q[100],p,u,nod,i;
memset(T,0,sizeof(T));
for (p=u=0,q[0]=s,T[s]=-1;p<=u;p++)
{nod=q[p];
for (i=1;i<=N;i++)
if (!T[i]&&C[nod][i]>F[nod][i])
{q[++u]=i;
T[i]=nod;
if (i==d) return 1;
}
}
return 0;
}
int main()
{int i,a,b,c,flux,r,num;
fstream f("critice.in",ios::in);
fstream g("critice.out",ios::out);
f>>N>>M;
for (i=1;i<=M;i++)
{f>>a>>b>>c;
m[i][0] = a;
m[i][1] = b;
C[a][b] = C[b][a] = c;
}
S=1;
f.close();
D=N;
for (flux=0;BF(S,D);flux=flux+r)
{for (r=2000000000,i=D;i!=S;i=T[i])
r=min(r,C[T[i]][i]-F[T[i]][i]);
for (i=D;i!=S;i=T[i])
F[T[i]][i]+=r,F[i][T[i]]-=r;
}
int p,u,q[100],nod;
memset(T,0,sizeof(T));
for (p=u=0,q[0]=1,T[1]=-1;p<=u;p++)
{nod=q[p];
for (i=1;i<=N;i++)
if (!T[i]&&C[nod][i]!=F[nod][i])
{q[++u] = i;
T[i] = nod;}
}
memset(T2,0,sizeof(T2));
for (p=u=0,q[0]=N,T2[N]=-1;p<=u;p++)
{nod=q[p];
for (i=1;i<=N;i++)
if (!T2[i]&&C[i][nod]!=F[i][nod])
{q[++u]=i;
T2[i]=nod;}
}
for (i=1,num=0;i<=M;i++)
if (((T[m[i][0]]&&T2[m[i][1]])||(T[m[i][1]]&&T2[m[i][0]]))&&C[m[i][0]][m[i][1]]==abs(F[m[i][0]][m[i][1]]))
num ++;
g<<num;
for (i = 1; i <= M; i++)
if (((T[m[i][0]]&&T2[m[i][1]])||(T[m[i][1]]&&T2[m[i][0]]))&&C[m[i][0]][m[i][1]]==abs(F[m[i][0]][m[i][1]]))
g<<i;
return 0;
g.close();
}