#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define NMAX 1001
int T[NMAX], C[NMAX][NMAX], F[NMAX][NMAX], N, M, m[NMAX][2], T2[NMAX], S, D;
int min(int a, int b)
{
return (a > b ? b : a);
}
int BF(int s, int d)
{
int q[NMAX], 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;
freopen("critice.in", "rt", stdin);
freopen("critice.out", "wt", stdout);
scanf("%d %d", &N, &M);
for (i = 1; i <= M; i++)
{
scanf("%d %d %d", &a, &b, &c);
m[i][0] = a;
m[i][1] = b;
C[a][b] = C[b][a] = c;
}
S = 1;
D = N;
for (flux = 0; BF(S, D); 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[NMAX], 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 ++;
printf("%d\n", 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]]))
printf("%d\n", i);
return 0;
}