#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define nmax 1004
#define fin "critice.in"
#define fout "critice.out"
typedef int sir[nmax];
typedef struct edge {
int x,y;
};
int flux[nmax][nmax],c[nmax][nmax], tata[nmax],lista[nmax],list[10*nmax],n,m;
edge e[10*nmax];
sir bfs, bft;
void get(int &x1, int &x2, int &x3)
{
int i,rez,l;
char str[250];
gets(str);
for (i=0, rez=0; str[i] != ' '; i++)
rez=rez*10 + int(str[i])-int('0');
x1=rez;
for (i++, rez=0; str[i] != ' '; i++)
rez=rez*10 + int(str[i])-int('0');
x2=rez;
for (i++,rez=0, l=strlen(str); i<l || str[i] == ' '; i++)
rez=rez*10 + int(str[i])-int('0');
x3=rez;
}
void citire()
{
int i,x,y,z;
//memset(flux,0,sizeof(flux));
//memset(c,0,sizeof(c));
freopen(fin,"r",stdin);
scanf("%d %d\n",&n,&m);
for (i=1; i<=m;i++)
{
//scanf("%d %d %d",&x,&y,&z);
get(x,y,z);
e[i].x=x; e[i].y=y;
c[x][y]=z; c[y][x]=z;
}
fclose(stdin);
}
int bf()
{
int i,j,k=1;
for (i=1; i<=n;i++) tata[i]=-1;
lista[1]=1; tata[1]=0;
for (i=1; i<=k; i++)
for (j=1; j<=n; j++)
if (tata[j] == -1 && flux[lista[i]][j] < c[lista[i]][j])
{
tata[j] = lista[i];
lista[++k]=j;
if (j==n) { i=k+1; break; }
}
if (tata[n] !=-1) return 1;
else return 0;
}
int min(int x, int y)
{
if (x<y) return x; else return y;
}
void fflux()
{
int i,max=20000000;
for (i=n; i !=1 && tata[i] !=-1; i=tata[i])
max = min(max,c[tata[i]][i]-flux[tata[i]][i]);
for (i=n; i!=1 && tata[i] != -1; i=tata[i])
{
flux[tata[i]][i]+=max;
flux[i][tata[i]]-=max;
}
}
void bff(int nod, sir &bol)
{
memset(bol,0,sizeof(bol));
int i=1,j,k=1;
lista[1]=nod;
bol[nod]=1;
tata[1]=0;
for (i=1; i<=k; i++)
for (j=1; j<=n; j++)
if ((!(bol[j])) && ( flux[lista[i]][j] < c[lista[i]][j]) )
{
bol[j]=1;
lista[++k]=j;
}
}
void bff2(int nod, sir &bol)
{
memset(bol,0,sizeof(bol));
int i,j,k=1;
lista[1]=nod;
bol[nod]=1;
tata[1]=0;
for (i=1; i<=k; i++)
for (j=1; j<=n; j++)
if (bol[j]==0 && flux[j][lista[i]] < c[j][lista[i]])
{
bol[j]=1;
lista[++k] = j;
}
}
void calc()
{
int i,k=0;
while (bf() == 1)
fflux();
bff(1,bfs);
bff2(n,bft);
for (i=1; i<=m; i++)
if ((bfs[e[i].x] && bft[e[i].y]) || (bfs[e[i].y] && bft[e[i].x]) )
list[++k]=i;
freopen(fout,"w",stdout);
printf("%d\n",k);
for (i=1; i<=k; i++)
printf("%d\n",list[i]);
fclose(stdout);
}
int main()
{
citire();
calc();
return 0;
}