using namespace std;
#include <cstdio>
#include <cassert>
#include <string>
#define FIN "critice.in"
#define FOUT "critice.out"
#define NMAX 1001
#define MMAX 10001
#define INF 0x3f3f3f3f
int c[NMAX][NMAX], N, M, f[NMAX][NMAX], vizs[NMAX], vizt[NMAX];
int pred[NMAX], rez[MMAX], cd[NMAX], begin, ended;
int retn1[MMAX], retn2[MMAX], *lv[NMAX], gr[NMAX];
int bf ()
{
int v, ii;
memset (pred, 0, sizeof (pred));
pred[1] = -1;
begin = ended = 0;
cd[ended++] = 1;
while (begin != ended)
{
v = cd[begin++];
assert (v >= 1 && v <= N);
for (int i = 1; i <= lv[v][0]; ++ i)
{
ii = lv[v][i];
if (c[v][ii] - f[v][ii] > 0 && !pred[ii])
{
pred[ii] = v;
cd[ended++] = ii;
if (ii == N)
return 1;
}
}
}
return 0;
}
int MIN (int x, int y)
{
return x < y ? x : y;
}
void ford_fulk ()
{
int i, min;
while (bf ())
{
min = INF;
for (i = N; pred[i] != -1; i = pred[i])
min = MIN (min, c[pred[i]][i] - f[pred[i]][i]);
for (i = N; pred[i] != -1; i = pred[i])
{
f[pred[i]][i] += min;
f[i][pred[i]] -= min;
}
}
}
void bfs ()
{
int v, ii;
memset (pred, 0, sizeof (pred));
pred[1] = -1;
vizs[1] = true;
begin = ended = 0;
cd[ended++] = 1;
while (begin != ended)
{
v = cd[begin++];
//fprintf (stderr, "%d ", v);
assert (v >= 1 && v <= N);
for (int i = 1; i <= lv[v][0]; ++ i)
{
ii = lv[i][0];
if (c[v][ii] - f[v][ii] > 0 && -f[v][ii] != c[v][ii] && !pred[ii])
{
pred[ii] = v;
vizs[ii] = true;
cd[ended++] = ii;
}
}
}
}
void bft ()
{
int v, ii;
memset (pred, 0, sizeof (pred));
pred[N] = -1;
vizt[N] = true;
begin = ended = 0;
cd[ended++] = N;
while (begin != ended)
{
v = cd[begin++];
//fprintf (stderr, "%d ", v);
assert (v >= 1 && v <= N);
for (int i = 1; i <= lv[v][0]; ++ i)
{
ii = lv[v][i];
if (c[v][ii] - f[v][ii] > 0 && -f[v][ii] != c[v][ii] && !pred[ii])
{
pred[ii] = v;
vizt[ii] = true;
cd[ended++] = ii;
}
}
}
}
void read ()
{
int x, y, cap;
scanf ("%d%d", &N, &M);
for (int i = 1; i <= M; ++ i)
{
scanf ("%d%d%d", &x, &y, &cap);
c[x][y] = c[y][x] = cap;
retn1[i] = x;
retn2[i] = y;
++ gr[x];
++ gr[y];
}
for (int i = 1; i <= N; ++ i)
{
lv[i] = new int [gr[i] + 1];
lv[i][0] = 0;
}
fseek (stdin, 0, SEEK_SET);
scanf ("%d%d", &N, &M);
for (int i = 1; i <= M; ++ i)
{
scanf ("%d%d%d", &x, &y, &cap);
lv[x][++lv[x][0]] = y;
lv[y][++lv[y][0]] = x;
}
}
int
main ()
{
int x, y, cap;
freopen (FIN, "rt", stdin);
freopen (FOUT, "wt", stdout);
read ();
ford_fulk ();
/*for (int i = 1; i <= N; ++ i)
for (int j = 1; j <= N; ++ j)
if (f[i][j] > 0)
printf ("%d %d %d\n", i, j, f[i][j]);*/
bfs ();
bft ();
int ct = 0;
for (int i = 1; i <= M; ++ i)
if ((vizs[retn1[i]] && vizt[retn2[i]]) ||
(vizs[retn2[i]] && vizt[retn1[i]]))
rez[++ct] = i;
printf ("%d\n", ct);
for (int i = 1; i <= ct; ++ i)
printf ("%d\n", rez[i]);
return 0;
}