#include <cstdio>
#include <bitset>
#include <vector>
#include <algorithm>
#define INF 2000000000
#define DIMN 1010
#define DIMM 10010
using namespace std;
bitset <DIMN> f;
int c[DIMN][DIMN],fl[DIMN][DIMN],d[DIMN],tt[DIMN],vf[DIMN],sol[DIMM];
vector <int> v[DIMN];
pair <int,int> fnr[DIMM];
int nr[2][DIMN];
int ok,n;
int bfs (int s){
int i,p,u,nod,vecin;
f.reset();
ok=0;
p=u=1;
d[p]=s;
f[s]=1;
while (p<=u){
nod=d[p];
for (i=0;i<v[nod].size();i++){
vecin=v[nod][i];
if (f[vecin]==0 && fl[nod][vecin]<c[nod][vecin]){
f[vecin]=1;
d[++u]=vecin;
tt[vecin]=nod;
}
if (vecin==n && fl[nod][vecin]<c[nod][vecin])
vf[++ok]=nod;
}
p++;
}
return f[n];
}
void bfs2 (int s,int caz){
int i,p,u,nod,vecin;
f.reset();
p=u=1;
d[p]=s;
f[s]=1;
while (p<=u){
nod=d[p];
nr[caz][nod]=1;
for (i=0;i<v[nod].size();i++){
vecin=v[nod][i];
if (f[vecin]==0 && max(fl[nod][vecin],-fl[nod][vecin])<c[nod][vecin]){
f[vecin]=1;
d[++u]=vecin;
}
}
p++;
}
}
int main()
{
FILE *fin=fopen ("critice.in","r");
FILE *fout=fopen ("critice.out","w");
int m,i,x,y,cap,s,nod,vecin,mini;
fscanf (fin,"%d%d",&n,&m);
for (i=1;i<=m;i++){
fscanf (fin,"%d%d%d",&x,&y,&cap);
c[x][y]=c[y][x]=cap;
fnr[i]=make_pair(x,y);
v[x].push_back(y);
v[y].push_back(x);
}
s=0;
while (bfs(1)){
for (i=1;i<=ok;i++){
nod=vf[i];
vecin=n;
mini=INF;
while (nod!=0){
mini=min(mini,c[nod][vecin]-fl[nod][vecin]);
vecin=nod;
nod=tt[nod];
}
nod=vf[i];
vecin=n;
while (nod!=0){
fl[nod][vecin]+=mini;
fl[vecin][nod]-=mini;
vecin=nod;
nod=tt[nod];
}
}
}
bfs2(1,0);
bfs2(n,1);
for (i=1;i<=m;i++){
x=fnr[i].first;
y=fnr[i].second;
if (nr[0][x]+nr[1][y]==2 || nr[0][y]+nr[1][x]==2)
sol[++s]=i;
}
fprintf (fout,"%d\n",s);
for (i=1;i<=s;i++)
fprintf (fout,"%d\n",sol[i]);
return 0;
}