#include <cstdio>
#include <vector>
#include <string>
using namespace std;
#define pb push_back
#define sz(c) (int)((c).size())
#define f first
#define s second
#define mp make_pair
#define fin "critice.in"
#define fout "critice.out"
const int Nmax = 1024;
const int Max = 10020;
int N,M;
int C[Nmax][Nmax],F[Nmax][Nmax];
int tat[Nmax];
char viz1[Nmax],viz2[Nmax];
int q[Nmax];
vector <int> g[Nmax];
vector <pair<int,int> > muchie;
void readdata()
{
int i,x,y,c;
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
scanf("%d%d",&N,&M);
for ( i = 1; i <= M; ++i )
{
scanf("%d%d%d",&x,&y,&c);
g[x].pb(y);
g[y].pb(x);
C[x][y] = C[y][x] = c;
muchie.pb(mp(x,y));
}
}
int bfs()
{
int i,x,st;
memset(tat,0,sizeof(tat));
tat[1] = 1;
q[1] = q[0] = 1;
for ( st = 1; st <= q[0]; ++st )
{
x = q[st];
for ( i = 0; i < sz(g[x]); ++i )
if ( tat[ g[x][i] ] == 0 && C[ x ][ g[x][i] ] > F[ x ][ g[x][i] ] )
tat[ g[x][i] ] = x, q[ ++q[0] ] = g[x][i];
if ( tat[N] ) return 1;
}
return 0;
}
inline int absf(int a) { return a < 0 ? ( a * -1 ) : a; }
void bf(int start,char viz[])
{
int i,x,st,cost;
memset(viz,0,sizeof(viz));
q[0] = 1; q[1] = start;
viz[start] = 1;
for ( st = 1; st <= q[0]; ++st )
{
x = q[st];
for ( i = 0; i < sz(g[x]); ++i )
if ( !viz[ g[x][i] ] && absf(F[ x ][ g[x][i] ]) < C[ x ][ g[x][i] ] )
viz[ g[x][i] ] = 1, q[ ++q[0] ] = g[x][i];
}
}
void flux()
{
int x,add = 0;
while ( bfs() )
{
add = Max;
x = N;
while ( x != 1 )
add = min(add,C[tat[x]][x]-F[tat[x]][x]), x = tat[x];
x = N;
while ( x != 1 )
F[tat[x]][x] += add, F[x][tat[x]] -= add, x = tat[x];
}
#ifdef DBG
int i,j;
for ( i = 1; i <= N; ++i, printf("\n") )
{
printf("%d: ",i);
for ( j = 0; j < sz(g[i]); ++j )
printf("%d|%d ",g[i][j],F[i][g[i][j]]);
}
#endif
}
void solve()
{
int i,cnt = 0;
bf(1,viz1);
bf(N,viz2);
for ( i = 0; i < M; ++i )
if ( viz1[ muchie[i].f ] && viz2[ muchie[i].s ] || viz1[ muchie[i].s ] && viz2[ muchie[i].f ] )
++cnt;
printf("%d\n",cnt);
for ( i = 0; i < M; ++i )
if ( viz1[ muchie[i].f ] && viz2[ muchie[i].s ] || viz1[ muchie[i].s ] && viz2[ muchie[i].f ] )
printf("%d\n",i+1);
}
int main()
{
readdata();
flux();
solve();
return 0;
}