#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
#include <iostream>

using namespace std;

#define MAXN 200005
#define pb push_back

struct edge {
    int v, c, i, d;
	edge(int v, int c, int i, int d) : v(v), c(c), i(i), d(d) {}
};

typedef vector<vector<edge> > graph;

int n, m, d[MAXN], f[MAXN];
graph g;

int main() {
	scanf("%d %d", &n, &m);
	g = graph(n);
	for(int i = 0; i < m; i++) {
		int a, b, c; scanf("%d %d %d", &a, &b, &c);
		a--; b--;
		g[a].pb(edge(b,c,i,0));
		g[b].pb(edge(a,c,i,1));
		f[a] += c;
		f[b] += c;
	}
	
	for(int i = 0; i < n; i++) {
		f[i] /= 2;
	}
	
	memset(d, -1, sizeof(d));
	queue<int> Q;
	Q.push(0);
	while(!Q.empty()) {
		int u = Q.front(); Q.pop();
		
		for(size_t i = 0; i < g[u].size(); i++) {
			int id = g[u][i].i;
			if(d[id] == -1) {
				d[id] = g[u][i].d;
			
				int v = g[u][i].v;
				f[v] -= g[u][i].c;
				if(v != n-1 && f[v] == 0) {
					Q.push(v);
				}
			}
		}
	}
	
	for(int i = 0; i < m; i++) {
		printf("%d\n", d[i]);
	}
}
