#include <cstdio>
#include <queue>
#include <vector>
#include <set>
using namespace std;
#define inf 0x3f3f3f3f
#define MAX_N 1010
#define pb push_back
#define f first
#define s second
#define mp make_pair
#define d(x,y) (C[x][y]-F[x][y])
#define b begin()
#define e end()
#define exista(a,b) (a.find(b)!=a.e)
typedef pair<int,int> ii;
typedef vector<int> vi;
typedef vector<ii> vii;
typedef set<int> si;
vi G[MAX_N];
vii edge;
int Nr[MAX_N][MAX_N];
int C[MAX_N][MAX_N], F[MAX_N][MAX_N];
int T[MAX_N];
int n, nr;
si L, R;
int bfs(int s, int d) {
queue<int> Q;
vi::iterator i;
memset(T, 0, sizeof(T));
Q.push(s);
while ( !Q.empty() ) {
int x = Q.front(); Q.pop();
for (i=G[x].b; i!=G[x].e; ++i)
if ( d(x,*i) && !T[*i] ) {
T[*i] = x; Q.push(*i);
}
}
return T[n] != 0;
}
void flux() {
int r, f, fin, i, rr;
for (f=0; bfs(1,n); f += rr)
for (rr=0, fin=1; fin<=n; ++fin) {
if ( C[fin][n] <= F[fin][n] )
continue;
for (r=d(fin,n), i=fin; i!=1; i=T[i])
r = min(r, d(T[i],i));
for (i=fin; i!=1; i=T[i])
F[T[i]][i] += r, F[i][T[i]] -= r;
F[fin][n] += r, F[n][fin] -= r;
rr += r;
}
}
void BF1(int start, si &S) {
vi::iterator i;
S.clear();
queue<int> Q;
memset(T, 0, sizeof(T));
Q.push(start);
S.insert(start);
while ( !Q.empty() ) {
int x = Q.front(); Q.pop();
for (i=G[x].b; i!=G[x].e; ++i)
if ( !T[*i] && d(x,*i) ) {
S.insert(*i);
T[*i] = x; Q.push(*i);
}
}
}
void read_data();
void write_data();
int main() {
read_data();
flux();
BF1(1, L);
BF1(n, R);
write_data();
return 0;
}
void read_data() {
int m;
freopen("critice.in", "r", stdin);
scanf("%d %d", &n, &m);
while ( m-- ) {
int x, y, c;
scanf("%d %d %d", &x, &y, &c);
G[x].pb(y);
G[y].pb(x);
C[x][y] = C[y][x] = c;
Nr[x][y] = Nr[y][x] = ++nr;
edge.pb(mp(x,y));
}
}
void write_data() {
vii :: iterator i;
freopen("critice.out", "w", stdout);
nr = 0;
for (i=edge.b; i!=edge.e; ++i) {
int x=i->f, y=i->s;
if ( (exista(L,x) && exista(R,y)) || (exista(L,y) && exista(R,x)) )
nr ++;
}
printf("%d\n", nr);
for (i=edge.b; i!=edge.e; ++i) {
int x=i->f, y=i->s;
if ( (exista(L,x) && exista(R,y)) || (exista(L,y) && exista(R,x)) )
printf("%d\n", Nr[x][y]);
}
}