using namespace std;
#include<stdio.h>
#include<fstream>
int m,n,a[1005][1005],vec[1005][1005],nvec[1005];
int viz[1005];
int nod[1005],t[1005],flux[1005];
int main()
{
FILE *fin=fopen("critice.in","r"),*fout=fopen("critice.out","w");
fscanf(fin,"%d%d",&n,&m);
int x,y,r,i;
for(i=1;i<=n;i++) nvec[i]=0;
for(i=1;i<=m;i++)
{
fscanf(fin,"%d%d%d",&x,&y,&r);
vec[x][++nvec[x]]=y;
vec[y][++nvec[y]]=x;
a[x][y]=a[y][x]=r;
}
//drumuri de creshtere cu BFS
int li,lf,k,nc;
do{
memset(viz,0,sizeof viz);
li=lf=1;
nod[1]=1;
viz[1]=1;
flux[1]=100000;
while(li<=lf&&nod[lf]!=n)
{
nc=nod[li];
for(k=1;k<=nvec[nc];k++)
if(viz[vec[nc][k]]==0&&a[nc][vec[nc][k]]>0)
{
viz[vec[nc][k]]=1;
nod[++lf]=vec[nc][k];
t[nod[lf]]=nod[li];
if(a[nc][vec[nc][k]]<flux[li])
flux[lf]=a[nc][vec[nc][k]];
else
flux[lf]=flux[li];
if(nod[lf]==n)
break;
}
li++;
}
if(nod[lf]==n)
k=n;
else
k=1;
while(k!=1)
{
a[t[k]][k]-=flux[lf];
a[k][t[k]]+=flux[lf];
k=t[k];
}
}while(nod[lf]==n);
int grup[1005],c[1005];
memset(grup,0,sizeof grup);
memset(viz,0,sizeof viz);
//de la stanga la dreapta
li=lf=1;
c[1]=1;
viz[1]=1;
while(li<=lf)
{
grup[c[li]]=1;
for(k=1;k<=nvec[c[li]];k++)
if(viz[vec[c[li]][k]]==0&&a[c[li]][vec[c[li]][k]]>0)
{
c[++lf]=vec[c[li]][k];
viz[c[lf]]=1;
}
li++;
}
//de la dreapta la stanga
li=lf=1;
c[1]=n;
if(!viz[n])
viz[n]=1;
else
lf=0;
while(li<=lf)
{
grup[c[li]]=2;
for(k=1;k<=nvec[c[li]];k++)
if(viz[vec[c[li]][k]]==0&&a[vec[c[li]][k]][c[li]]>0)
{
c[++lf]=vec[c[li]][k];
viz[c[lf]]=1;
}
li++;
}
int sol[10005],nsol=0;
freopen("critice.in","r",fin);
fscanf(fin,"%d%d",&n,&m);
for(i=1;i<=m;i++)
{
fscanf(fin,"%d%d%d",&x,&y,&r);
if(grup[x]&&grup[y]&&grup[x]!=grup[y])
sol[++nsol]=i;
}
fprintf(fout,"%d\n",nsol);
for(i=1;i<=nsol;i++)
fprintf(fout,"%d\n",sol[i]);
fclose(fin);
fclose(fout);
return 0;
}