#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const int INF=1<<30;
const int MMAX=10010;
const int NMAX=1010;
int a[NMAX][NMAX], flux[NMAX][NMAX], coada[NMAX*NMAX], cont[NMAX], prec[NMAX], vecini[NMAX][NMAX], n;
bool fol1[NMAX], foln[NMAX];
void flux_max(int s, int d);
void bf1();
void bfn();
int bf(int s, int d);
int minim(int a, int b);
int main()
{
int x[MMAX], y[MMAX], i, k=0, m, sol[NMAX];
freopen("critice.in", "r", stdin);
freopen("critice.out", "w", stdout);
scanf("%d%d", &n, &m);
for (i=1; i<=m; i++)
{
scanf("%d%d", &x[i], &y[i]);
scanf("%d", &a[x[i]][y[i]]);
a[y[i]][x[i]]=a[x[i]][y[i]];
cont[x[i]]++;
cont[y[i]]++;
}//for i
// for (i=1; i<=n; i++)
// {
// vecini[i]=new int[cont[i]+1];
// vecini[i][0]=0;
// }//for i
for (i=1; i<=m; i++)
{
vecini[x[i]][++vecini[x[i]][0]]=y[i];
vecini[y[i]][++vecini[y[i]][0]]=x[i];
}//for i
flux_max(1, n);
bf1();
bfn();
for (i=1; i<=m; i++)
if ((fol1[x[i]]&&foln[y[i]])||(fol1[y[i]]&&foln[x[i]]))
sol[k++]=i;
printf("%d\n", k);
for (i=0; i<k; i++)
printf("%d\n", sol[i]);
return 0;
}//main
void flux_max(int s, int d)
{
int min, i;
while (bf(s, d))
{
min=INF;
i=d;
while (i!=s)
{
min=minim(min, a[prec[i]][i]-flux[prec[i]][i]);
i=prec[i];
}//while
i=d;
while (i!=s)
{
flux[prec[i]][i]+=min;
flux[i][prec[i]]-=min;
i=prec[i];
}//while
}//while
}//flux_max
int bf(int s, int d)
{
int p=0, u=0, t, i, j;
memset(prec, -1, sizeof(prec));
coada[u]=s;
prec[s]=-2;
if (s==d)
return 1;
while (p<=u)
{
t=coada[p++];
for (i=1; i<=vecini[t][0]; i++)
{
j=vecini[t][i];
if ((prec[j]==-1)&&(a[t][j]>flux[t][j]))
{
coada[++u]=j;
prec[j]=t;
if (j==d)
return 1;
}//if
}//for i
}//while
return 0;
}//bf
void bf1()
{
int p=0, u=0, t, i, j;
coada[u]=1;
fol1[1]=1;
while (p<=u)
{
t=coada[p++];
for (i=1; i<=vecini[t][0]; i++)
{
j=vecini[t][i];
if ((!fol1[j])&&(a[t][j]>abs(flux[t][j])))
{
coada[++u]=j;
fol1[j]=1;
}//if
}//for i
}//while
}//bf1
void bfn()
{
int p=0, u=0, t, i, j;
coada[u]=n;
foln[n]=1;
while (p<=u)
{
t=coada[p++];
for (i=1; i<=vecini[t][0]; i++)
{
j=vecini[t][i];
if ((!foln[j])&&(a[t][j]>abs(flux[t][j])))
{
coada[++u]=j;
foln[j]=1;
}//if
}//for i
}//while
}//bfn
int minim(int a, int b)
{
if (a<b)
return a;
else
return b;
}//minim