#include <cstdio>
#include <vector>
#include <cstdlib>
#define f first
#define s second
using namespace std;
const int N = 1005;
const int INF = 0x3f3f3f3f;
int n, m, c[N][N], f[N][N], t[N], v[N], x[N], y[N];
vector<int> a[N];
pair<int, int> P[N * 10];
int BFS() {
int i, j, k;
int cd[N];
cd[0] = 1; cd[1] = 1;
for(i = 1; i <= n; ++i)
v[i] = t[i] = 0;
v[1] = 1;
for(j = 1; j <= cd[0]; ++j) {
k = cd[j];
if(k == n)
return 1;
for(i = 0; i < a[k].size(); ++i)
if(!v[a[k][i]] && f[k][a[k][i]] < c[k][a[k][i]]) {
cd[++cd[0]] = a[k][i];
v[a[k][i]] = 1;
t[a[k][i]] = k;
}
}
return v[N];
}
void bfs(int st, int A[N]) {
int cd[N], i, k, j;
cd[0] = 1; cd[1] = st;
for(i = 1; i <= n; ++i)
v[i] = 0;
for(j = 1; j <= cd[0]; ++j) {
k = cd[j];
v[k] = 1;
for(i = 0; i < a[k].size(); ++i){
if(!v[a[k][i]]) {
cd[++cd[0]] = a[k][i];
if(c[k][a[k][i]] - abs(f[k][a[k][i]]) >0)
A[a[k][i]] = 1;
}
}
}
A[st] = 1;
}
int main() {
freopen("critice.in", "r", stdin);
freopen("critice.out", "w", stdout);
int i, j, X, Y, C, k, flux = 0, r;
scanf("%d %d", &n, &m);
for(i = 1; i <= m; ++i)
scanf("%d %d %d", &X, &Y, &C), P[i].f= X, P[i].s = Y, c[X][Y] = C, c[Y][X] = C, a[X].push_back(Y), a[Y].push_back(X);
for(; BFS(); )
for( i = 0; i < a[n].size(); ++i)
if(v[a[n][i]] && f[a[n][i]][n] < c[a[n][i]][n]) {
t[n] = a[n][i];
k = n;
r = INF;
while(t[k]) {
r = min(r, c[t[k]][k] - f[t[k]][k]);
k = t[k];
}
k = n;
while(t[k]) {
f[t[k]][k] += r;
f[k][t[k]] -= r;
k = t[k];
}
flux += r;
}
bfs(1, x);
bfs(n, y);
int sol[N * 10], nr = 0;
for(i = 1; i <= m; ++i){
if((x[P[i].f] && y[P[i].s] && f[P[i].f][P[i].s] == c[P[i].f][P[i].s]) || (x[P[i].s] && y[P[i].f] && f[P[i].s][P[i].f] == c[P[i].f][P[i].s]) )
sol[++nr] = i;
// printf("%d %d %d %d\n",c[P[i].f][P[i].s], f[P[i].f][P[i].s], f[P[i].s][P[i].f], c[P[i].s][P[i].f]);
}
// for(i = 1; i <= n; ++i)
// printf("%d %d\n", x[i], y[i]);
printf("%d\n", nr);
for(i = 1; i <= nr; ++i)
printf("%d\n",sol[i]);
}