//critice infoarena
const nmax =1000;
type edge = record
x,y:integer;
end;
sir = array[1..nmax] of boolean;
var flux, c : array[1..nmax,1..nmax] of integer;
graf : array[1..nmax,0..nmax] of integer;
e: array[1..10*nmax] of edge;
bfs,bft : sir;
tata,lista:array[1..nmax] of integer;
list: array[1..nmax*10] of integer;
n,m:integer;
procedure addlist(x,nod :integer);
begin
inc(graf[nod][0]);
graf[nod,graf[nod,0]]:=x;
end;
procedure citire;
var i,x,y,z:integer;
begin
assign(input,'critice.in'); reset(input);
readln(n,m);
for i:=1 to m do
begin
readln(x,y,z);
addlist(x,y); addlist(y,x);
e[i].x:=x; e[i].y:=y;
c[x,y]:=z; c[y,x]:=z;
end;
closE(input);
end;
function bf:boolean;
var i,j,k,z:integer;
begin
k:=1;
for i:=1 to n do tata[i]:=-1;
lista[1]:=1;
tata[1]:=0;
i:=1;
while i<= k do
begin
for z:=1 to graf[lista[i]][0] do
begin
j:=graf[lista[i]][z];
if ( tata[j] = -1 ) and ( flux[lista[i],j] < c[lista[i],j]) then
begin
tata[j]:=lista[i];
inc(k);
lista[k]:=j;
if j = n then begin i:=k; break; end;
end;
end;
inc(i);
end;
bf:=tata[n]<>-1;
end;
function min(x,y:integer):integer;
begin
if x < y then min:=x else min:=y;
end;
procedure fflux;
var i,max : integer;
begin
max:=maxint;
i:=n;
while (i <> 1) and (tata[i] <> -1) do
begin
max:=min(max,c[tata[i],i]-flux[tata[i],i]);
i:=tata[i];
end;
i:=n;
while (i <> 1) and (tata[i] <> -1) do
begin
flux[tata[i],i]:=flux[tata[i],i]+max;
flux[i,tata[i]]:=flux[i,tata[i]]-max;
i:=tata[i];
end;
end;
procedure bff(nod:integer; var bool: sir);
var i,j,k,z:integer;
begin
k:=1; i:=1;
lista[1]:=nod;
bool[nod]:=true;
tata[1]:=0;
while i<= k do
begin
for z:=1 to graf[lista[i]][0] do
begin
j:=graf[lista[i]][z];
if ( not bool[j] ) and ( flux[lista[i],j] < c[lista[i],j]) then
begin
bool[j]:=true;
inc(k);
lista[k]:=j;
end;
end;
inc(i);
end;
end;
procedure bff2(nod:integer; var bool: sir);
var i,j,k,z:integer;
begin
k:=1; i:=1;
lista[1]:=nod;
bool[nod]:=true;
tata[1]:=0;
while i<= k do
begin
for z:=1 to graf[lista[i]][0] do
begin
j:=graf[lista[i]][z];
if ( not bool[j] ) and ( flux[j,lista[i]] < c[j,lista[i]]) then
begin
bool[j]:=true;
inc(k);
lista[k]:=j;
end;
end;
inc(i);
end;
end;
procedure calc;
var i,k:integer;
begin
while bf do
fflux;
bff(1,bfs);
bff2(n,bft);
k:=0;
for i:=1 to m do
begin
if ( (bfs[e[i].x] and bft[e[i].y]) or (bfs[e[i].y] and bft[e[i].x]) ) then
begin
inc(k);
list[k]:=i;
end;
end;
assign(output,'critice.out'); rewrite(output);
writeln(k);
for i:=1 to k do
writeln(list[i]);
close(output);
end;
begin
citire;
calc;
end.